﻿namespace Utilities.Test
{
    using System;
    using System.Text;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.VisualStudio.TestTools.UnitTesting;

    /// <summary>
    /// Testa o algoritmo CityHash.
    /// </summary>
    [TestClass]
    public class CityHashTest
    {
        # region Dados para teste

        /// <summary>
        /// Uma constante.
        /// </summary>
        private const ulong k0 = 0xc3a5c85c97cb3127UL;

        /// <summary>
        /// O texto a ser testado.
        /// </summary>
        private static string testString;

        /// <summary>
        /// Os dados para teste.
        /// </summary>
        private static ulong[,] testdata = {
            {0x9ae16a3b2f90404fUL, 0x75106db890237a4aUL, 0x3feac5f636039766UL, 0x3df09dfc64c09a2bUL, 0x3cb540c392e51e29UL, 0x6b56343feac0663UL, 0x5b7bc50fd8e8ad92UL,
            0x3df09dfc64c09a2bUL, 0x3cb540c392e51e29UL, 0x6b56343feac0663UL, 0x5b7bc50fd8e8ad92UL,
            0x95162f24e6a5f930UL, 0x6808bdf4f1eb06e0UL, 0xb3b1f3a67b624d82UL, 0xc9a62f12bd4cd80bUL,
            0xdc56d17aUL},
            {0x541150e87f415e96UL, 0x1aef0d24b3148a1aUL, 0xbacc300e1e82345aUL, 0xc3cdc41e1df33513UL, 0x2c138ff2596d42f6UL, 0xf58e9082aed3055fUL, 0x162e192b2957163dUL,
            0xc3cdc41e1df33513UL, 0x2c138ff2596d42f6UL, 0xf58e9082aed3055fUL, 0x162e192b2957163dUL,
            0xfb99e85e0d16f90cUL, 0x608462c15bdf27e8UL, 0xe7d2c5c943572b62UL, 0x1baaa9327642798cUL,
            0x99929334UL},
            {0xf3786a4b25827c1UL, 0x34ee1a2bf767bd1cUL, 0x2f15ca2ebfb631f2UL, 0x3149ba1dac77270dUL, 0x70e2e076e30703cUL, 0x59bcc9659bc5296UL, 0x9ecbc8132ae2f1d7UL,
            0x3149ba1dac77270dUL, 0x70e2e076e30703cUL, 0x59bcc9659bc5296UL, 0x9ecbc8132ae2f1d7UL,
            0xa01d30789bad7cf2UL, 0xae03fe371981a0e0UL, 0x127e3883b8788934UL, 0xd0ac3d4c0a6fca32UL,
            0x4252edb7UL},
            {0xef923a7a1af78eabUL, 0x79163b1e1e9a9b18UL, 0xdf3b2aca6e1e4a30UL, 0x2193fb7620cbf23bUL, 0x8b6a8ff06cda8302UL, 0x1a44469afd3e091fUL, 0x8b0449376612506UL,
            0x2193fb7620cbf23bUL, 0x8b6a8ff06cda8302UL, 0x1a44469afd3e091fUL, 0x8b0449376612506UL,
            0xe9d9d41c32ad91d1UL, 0xb44ab09f58e3c608UL, 0x19e9175f9fcf784UL, 0x839b3c9581b4a480UL,
            0xebc34f3cUL},
            {0x11df592596f41d88UL, 0x843ec0bce9042f9cUL, 0xcce2ea1e08b1eb30UL, 0x4d09e42f09cc3495UL, 0x666236631b9f253bUL, 0xd28b3763cd02b6a3UL, 0x43b249e57c4d0c1bUL,
            0x4d09e42f09cc3495UL, 0x666236631b9f253bUL, 0xd28b3763cd02b6a3UL, 0x43b249e57c4d0c1bUL,
            0x3887101c8adea101UL, 0x8a9355d4efc91df0UL, 0x3e610944cc9fecfdUL, 0x5bf9eb60b08ac0ceUL,
            0x26f2b463UL},
            {0x831f448bdc5600b3UL, 0x62a24be3120a6919UL, 0x1b44098a41e010daUL, 0xdc07df53b949c6bUL, 0xd2b11b2081aeb002UL, 0xd212b02c1b13f772UL, 0xc0bed297b4be1912UL,
            0xdc07df53b949c6bUL, 0xd2b11b2081aeb002UL, 0xd212b02c1b13f772UL, 0xc0bed297b4be1912UL,
            0x682d3d2ad304e4afUL, 0x40e9112a655437a1UL, 0x268b09f7ee09843fUL, 0x6b9698d43859ca47UL,
            0xb042c047UL},
            {0x3eca803e70304894UL, 0xd80de767e4a920aUL, 0xa51cfbb292efd53dUL, 0xd183dcda5f73edfaUL, 0x3a93cbf40f30128cUL, 0x1a92544d0b41dbdaUL, 0xaec2c4bee81975e1UL,
            0xd183dcda5f73edfaUL, 0x3a93cbf40f30128cUL, 0x1a92544d0b41dbdaUL, 0xaec2c4bee81975e1UL,
            0x5f91814d1126ba4bUL, 0xf8ac57eee87fcf1fUL, 0xc55c644a5d0023cdUL, 0xadb761e827825ff2UL,
            0xe73bb0a8UL},
            {0x1b5a063fb4c7f9f1UL, 0x318dbc24af66dee9UL, 0x10ef7b32d5c719afUL, 0xb140a02ef5c97712UL, 0xb7d00ef065b51b33UL, 0x635121d532897d98UL, 0x532daf21b312a6d6UL,
            0xb140a02ef5c97712UL, 0xb7d00ef065b51b33UL, 0x635121d532897d98UL, 0x532daf21b312a6d6UL,
            0xc0b09b75d943910UL, 0x8c84dfb5ef2a8e96UL, 0xe5c06034b0353433UL, 0x3170faf1c33a45ddUL,
            0x91dfdd75UL},
            {0xa0f10149a0e538d6UL, 0x69d008c20f87419fUL, 0x41b36376185b3e9eUL, 0x26b6689960ccf81dUL, 0x55f23b27bb9efd94UL, 0x3a17f6166dd765dbUL, 0xc891a8a62931e782UL,
            0x26b6689960ccf81dUL, 0x55f23b27bb9efd94UL, 0x3a17f6166dd765dbUL, 0xc891a8a62931e782UL,
            0x23852dc37ddd2607UL, 0x8b7f1b1ec897829eUL, 0xd1d69452a54eed8aUL, 0x56431f2bd766ec24UL,
            0xc87f95deUL},
            {0xfb8d9c70660b910bUL, 0xa45b0cc3476bff1bUL, 0xb28d1996144f0207UL, 0x98ec31113e5e35d2UL, 0x5e4aeb853f1b9aa7UL, 0xbcf5c8fe4465b7c8UL, 0xb1ea3a8243996f15UL,
            0x98ec31113e5e35d2UL, 0x5e4aeb853f1b9aa7UL, 0xbcf5c8fe4465b7c8UL, 0xb1ea3a8243996f15UL,
            0xcabbccedb6407571UL, 0xd1e40a84c445ec3aUL, 0x33302aa908cf4039UL, 0x9f15f79211b5cdf8UL,
            0x3f5538efUL},
            {0x236827beae282a46UL, 0xe43970221139c946UL, 0x4f3ac6faa837a3aaUL, 0x71fec0f972248915UL, 0x2170ec2061f24574UL, 0x9eb346b6caa36e82UL, 0x2908f0fdbca48e73UL,
            0x71fec0f972248915UL, 0x2170ec2061f24574UL, 0x9eb346b6caa36e82UL, 0x2908f0fdbca48e73UL,
            0x8101c99f07c64abbUL, 0xb9f4b02b1b6a96a7UL, 0x583a2b10cd222f88UL, 0x199dae4cf9db24cUL,
            0x70eb1a1fUL},
            {0xc385e435136ecf7cUL, 0xd9d17368ff6c4a08UL, 0x1b31eed4e5251a67UL, 0xdf01a322c43a6200UL, 0x298b65a1714b5a7eUL, 0x933b83f0aedf23cUL, 0x157bcb44d63f765aUL,
            0xdf01a322c43a6200UL, 0x298b65a1714b5a7eUL, 0x933b83f0aedf23cUL, 0x157bcb44d63f765aUL,
            0xd6e9fc7a272d8b51UL, 0x3ee5073ef1a9b777UL, 0x63149e31fac02c59UL, 0x2f7979ff636ba1d8UL,
            0xcfd63b83UL},
            {0xe3f6828b6017086dUL, 0x21b4d1900554b3b0UL, 0xbef38be1809e24f1UL, 0xd93251758985ee6cUL, 0x32a9e9f82ba2a932UL, 0x3822aacaa95f3329UL, 0xdb349b2f90a490d8UL,
            0xd93251758985ee6cUL, 0x32a9e9f82ba2a932UL, 0x3822aacaa95f3329UL, 0xdb349b2f90a490d8UL,
            0x8d49194a894a19caUL, 0x79a78b06e42738e6UL, 0x7e0f1eda3d390c66UL, 0x1c291d7e641100a5UL,
            0x894a52efUL},
            {0x851fff285561dca0UL, 0x4d1277d73cdf416fUL, 0x28ccffa61010ebe2UL, 0x77a4ccacd131d9eeUL, 0xe1d08eeb2f0e29aaUL, 0x70b9e3051383fa45UL, 0x582d0120425cabaUL,
            0x77a4ccacd131d9eeUL, 0xe1d08eeb2f0e29aaUL, 0x70b9e3051383fa45UL, 0x582d0120425cabaUL,
            0xa740eef1846e4564UL, 0x572dddb74ac3ae00UL, 0xfdb5ca9579163bbdUL, 0xa649b9b799c615d2UL,
            0x9cde6a54UL},
            {0x61152a63595a96d9UL, 0xd1a3a91ef3a7ba45UL, 0x443b6bb4a493ad0cUL, 0xa154296d11362d06UL, 0xd0f0bf1f1cb02fc1UL, 0xccb87e09309f90d1UL, 0xb24a8e4881911101UL,
            0xa154296d11362d06UL, 0xd0f0bf1f1cb02fc1UL, 0xccb87e09309f90d1UL, 0xb24a8e4881911101UL,
            0x1a481b4528559f58UL, 0xbf837a3150896995UL, 0x4989ef6b941a3757UL, 0x2e725ab72d0b2948UL,
            0x6c4898d5UL},
            {0x44473e03be306c88UL, 0x30097761f872472aUL, 0x9fd1b669bfad82d7UL, 0x3bab18b164396783UL, 0x47e385ff9d4c06fUL, 0x18062081bf558dfUL, 0x63416eb68f104a36UL,
            0x3bab18b164396783UL, 0x47e385ff9d4c06fUL, 0x18062081bf558dfUL, 0x63416eb68f104a36UL,
            0x4abda1560c47ac80UL, 0x1ea0e63dc6587aeeUL, 0x33ec79d92ebc1deUL, 0x94f9dccef771e048UL,
            0x13e1978eUL},
            {0x3ead5f21d344056UL, 0xfb6420393cfb05c3UL, 0x407932394cbbd303UL, 0xac059617f5906673UL, 0x94d50d3dcd3069a7UL, 0x2b26c3b92dea0f0UL, 0x99b7374cc78fc3fbUL,
            0xac059617f5906673UL, 0x94d50d3dcd3069a7UL, 0x2b26c3b92dea0f0UL, 0x99b7374cc78fc3fbUL,
            0x1a8e3c73cdd40ee8UL, 0xcbb5fca06747f45bUL, 0xceec44238b291841UL, 0x28bf35cce9c90a25UL,
            0x51b4ba8UL},
            {0x6abbfde37ee03b5bUL, 0x83febf188d2cc113UL, 0xcda7b62d94d5b8eeUL, 0xa4375590b8ae7c82UL, 0x168fd42f9ecae4ffUL, 0x23bbde43de2cb214UL, 0xa8c333112a243c8cUL,
            0xa4375590b8ae7c82UL, 0x168fd42f9ecae4ffUL, 0x23bbde43de2cb214UL, 0xa8c333112a243c8cUL,
            0x10ac012e8c518b49UL, 0x64a44605d8b29458UL, 0xa67e701d2a679075UL, 0x3a3a20f43ec92303UL,
            0xb6b06e40UL},
            {0x943e7ed63b3c080UL, 0x1ef207e9444ef7f8UL, 0xef4a9f9f8c6f9b4aUL, 0x6b54fc38d6a84108UL, 0x32f4212a47a4665UL, 0x6b5a9a8f64ee1da6UL, 0x9f74e86c6da69421UL,
            0x6b54fc38d6a84108UL, 0x32f4212a47a4665UL, 0x6b5a9a8f64ee1da6UL, 0x9f74e86c6da69421UL,
            0x946dd0cb30c1a08eUL, 0xfdf376956907eaaaUL, 0xa59074c6eec03028UL, 0xb1a3abcf283f34acUL,
            0x240a2f2UL},
            {0xd72ce05171ef8a1aUL, 0xc6bd6bd869203894UL, 0xc760e6396455d23aUL, 0xf86af0b40dcce7bUL, 0x8d3c15d613394d3cUL, 0x491e400491cd4eceUL, 0x7c19d3530ea3547fUL,
            0xf86af0b40dcce7bUL, 0x8d3c15d613394d3cUL, 0x491e400491cd4eceUL, 0x7c19d3530ea3547fUL,
            0x1362963a1dc32af9UL, 0xfb9bc11762e1385cUL, 0x9e164ef1f5376083UL, 0x6c15819b5e828a7eUL,
            0x5dcefc30UL},
            {0x4182832b52d63735UL, 0x337097e123eea414UL, 0xb5a72ca0456df910UL, 0x7ebc034235bc122fUL, 0xd9a7783d4edd8049UL, 0x5f8b04a15ae42361UL, 0xfc193363336453ddUL,
            0x7ebc034235bc122fUL, 0xd9a7783d4edd8049UL, 0x5f8b04a15ae42361UL, 0xfc193363336453ddUL,
            0x9b6c50224ef8c4f8UL, 0xba225c7942d16c3fUL, 0x6f6d55226a73c412UL, 0xabca061fe072152aUL,
            0x7a48b105UL},
            {0xd6cdae892584a2cbUL, 0x58de0fa4eca17dcdUL, 0x43df30b8f5f1cb00UL, 0x9e4ea5a4941e097dUL, 0x547e048d5a9daabaUL, 0xeb6ecbb0b831d185UL, 0xe0168df5fad0c670UL,
            0x9e4ea5a4941e097dUL, 0x547e048d5a9daabaUL, 0xeb6ecbb0b831d185UL, 0xe0168df5fad0c670UL,
            0xafa9705f98c2c96aUL, 0x749436f48137a96bUL, 0x759c041fc21df486UL, 0xb23bf400107aa2ecUL,
            0xfd55007bUL},
            {0x5c8e90bc267c5ee4UL, 0xe9ae044075d992d9UL, 0xf234cbfd1f0a1e59UL, 0xce2744521944f14cUL, 0x104f8032f99dc152UL, 0x4e7f425bfac67ca7UL, 0x9461b911a1c6d589UL,
            0xce2744521944f14cUL, 0x104f8032f99dc152UL, 0x4e7f425bfac67ca7UL, 0x9461b911a1c6d589UL,
            0x5e5ecc726db8b60dUL, 0xcce68b0586083b51UL, 0x8a7f8e54a9cba0fcUL, 0x42f010181d16f049UL,
            0x6b95894cUL},
            {0xbbd7f30ac310a6f3UL, 0xb23b570d2666685fUL, 0xfb13fb08c9814fe7UL, 0x4ee107042e512374UL, 0x1e2c8c0d16097e13UL, 0x210c7500995aa0e6UL, 0x6c13190557106457UL,
            0x4ee107042e512374UL, 0x1e2c8c0d16097e13UL, 0x210c7500995aa0e6UL, 0x6c13190557106457UL,
            0xa99b31c96777f381UL, 0x8312ae8301d386c0UL, 0xed5042b2a4fa96a3UL, 0xd71d1bb23907fe97UL,
            0x3360e827UL},
            {0x36a097aa49519d97UL, 0x8204380a73c4065UL, 0x77c2004bdd9e276aUL, 0x6ee1f817ce0b7aeeUL, 0xe9dcb3507f0596caUL, 0x6bc63c666b5100e2UL, 0xe0b056f1821752afUL,
            0x6ee1f817ce0b7aeeUL, 0xe9dcb3507f0596caUL, 0x6bc63c666b5100e2UL, 0xe0b056f1821752afUL,
            0x8ea1114e60292678UL, 0x904b80b46becc77UL, 0x46cd9bb6e9dff52fUL, 0x4c91e3b698355540UL,
            0x45177e0bUL},
            {0xdc78cb032c49217UL, 0x112464083f83e03aUL, 0x96ae53e28170c0f5UL, 0xd367ff54952a958UL, 0xcdad930657371147UL, 0xaa24dc2a9573d5feUL, 0xeb136daa89da5110UL,
            0xd367ff54952a958UL, 0xcdad930657371147UL, 0xaa24dc2a9573d5feUL, 0xeb136daa89da5110UL,
            0xde623005f6d46057UL, 0xb50c0c92b95e9b7fUL, 0xa8aa54050b81c978UL, 0x573fb5c7895af9b5UL,
            0x7c6fffe4UL},
            {0x441593e0da922dfeUL, 0x936ef46061469b32UL, 0x204a1921197ddd87UL, 0x50d8a70e7a8d8f56UL, 0x256d150ae75dab76UL, 0xe81f4c4a1989036aUL, 0xd0f8db365f9d7e00UL,
            0x50d8a70e7a8d8f56UL, 0x256d150ae75dab76UL, 0xe81f4c4a1989036aUL, 0xd0f8db365f9d7e00UL,
            0x753d686677b14522UL, 0x9f76e0cb6f2d0a66UL, 0xab14f95988ec0d39UL, 0x97621d9da9c9812fUL,
            0xbbc78da4UL},
            {0x2ba3883d71cc2133UL, 0x72f2bbb32bed1a3cUL, 0x27e1bd96d4843251UL, 0xa90f761e8db1543aUL, 0xc339e23c09703cd8UL, 0xf0c6624c4b098fd3UL, 0x1bae2053e41fa4d9UL,
            0xa90f761e8db1543aUL, 0xc339e23c09703cd8UL, 0xf0c6624c4b098fd3UL, 0x1bae2053e41fa4d9UL,
            0x3589e273c22ba059UL, 0x63798246e5911a0bUL, 0x18e710ec268fc5dcUL, 0x714a122de1d074f3UL,
            0xc5c25d39UL},
            {0xf2b6d2adf8423600UL, 0x7514e2f016a48722UL, 0x43045743a50396baUL, 0x23dacb811652ad4fUL, 0xc982da480e0d4c7dUL, 0x3a9c8ed5a399d0a9UL, 0x951b8d084691d4e4UL,
            0x23dacb811652ad4fUL, 0xc982da480e0d4c7dUL, 0x3a9c8ed5a399d0a9UL, 0x951b8d084691d4e4UL,
            0xd9f87b4988cff2f7UL, 0x217a191d986aa3bcUL, 0x6ad23c56b480350UL, 0xdd78673938ceb2e7UL,
            0xb6e5d06eUL},
            {0x38fffe7f3680d63cUL, 0xd513325255a7a6d1UL, 0x31ed47790f6ca62fUL, 0xc801faaa0a2e331fUL, 0x491dbc58279c7f88UL, 0x9c0178848321c97aUL, 0x9d934f814f4d6a3cUL,
            0xc801faaa0a2e331fUL, 0x491dbc58279c7f88UL, 0x9c0178848321c97aUL, 0x9d934f814f4d6a3cUL,
            0x606a3e4fc8763192UL, 0xbc15cb36a677ee84UL, 0x52d5904157e1fe71UL, 0x1588dd8b1145b79bUL,
            0x6178504eUL},
            {0xb7477bf0b9ce37c6UL, 0x63b1c580a7fd02a4UL, 0xf6433b9f10a5dacUL, 0x68dd76db9d64eca7UL, 0x36297682b64b67UL, 0x42b192d71f414b7aUL, 0x79692cef44fa0206UL,
            0x68dd76db9d64eca7UL, 0x36297682b64b67UL, 0x42b192d71f414b7aUL, 0x79692cef44fa0206UL,
            0xf0979252f4776d07UL, 0x4b87cd4f1c9bbf52UL, 0x51b84bbc6312c710UL, 0x150720fbf85428a7UL,
            0xbd4c3637UL},
            {0x55bdb0e71e3edebdUL, 0xc7ab562bcf0568bcUL, 0x43166332f9ee684fUL, 0xb2e25964cd409117UL, 0xa010599d6287c412UL, 0xfa5d6461e768dda2UL, 0xcb3ce74e8ec4f906UL,
            0xb2e25964cd409117UL, 0xa010599d6287c412UL, 0xfa5d6461e768dda2UL, 0xcb3ce74e8ec4f906UL,
            0x6120abfd541a2610UL, 0xaa88b148cc95794dUL, 0x2686ca35df6590e3UL, 0xc6b02d18616ce94dUL,
            0x6e7ac474UL},
            {0x782fa1b08b475e7UL, 0xfb7138951c61b23bUL, 0x9829105e234fb11eUL, 0x9a8c431f500ef06eUL, 0xd848581a580b6c12UL, 0xfecfe11e13a2bdb4UL, 0x6c4fa0273d7db08cUL,
            0x9a8c431f500ef06eUL, 0xd848581a580b6c12UL, 0xfecfe11e13a2bdb4UL, 0x6c4fa0273d7db08cUL,
            0x482f43bf5ae59fcbUL, 0xf651fbca105d79e6UL, 0xf09f78695d865817UL, 0x7a99d0092085cf47UL,
            0x1fb4b518UL},
            {0xc5dc19b876d37a80UL, 0x15ffcff666cfd710UL, 0xe8c30c72003103e2UL, 0x7870765b470b2c5dUL, 0x78a9103ff960d82UL, 0x7bb50ffc9fac74b3UL, 0x477e70ab2b347db2UL,
            0x7870765b470b2c5dUL, 0x78a9103ff960d82UL, 0x7bb50ffc9fac74b3UL, 0x477e70ab2b347db2UL,
            0xa625238bdf7c07cfUL, 0x1128d515174809f5UL, 0xb0f1647e82f45873UL, 0x17792d1c4f222c39UL,
            0x31d13d6dUL},
            {0x5e1141711d2d6706UL, 0xb537f6dee8de6933UL, 0x3af0a1fbbe027c54UL, 0xea349dbc16c2e441UL, 0x38a7455b6a877547UL, 0x5f97b9750e365411UL, 0xe8cde7f93af49a3UL,
            0xea349dbc16c2e441UL, 0x38a7455b6a877547UL, 0x5f97b9750e365411UL, 0xe8cde7f93af49a3UL,
            0xba101925ec1f7e26UL, 0xd5e84cab8192c71eUL, 0xe256427726fdd633UL, 0xa4f38e2c6116890dUL,
            0x26fa72e3UL},
            {0x782edf6da001234fUL, 0xf48cbd5c66c48f3UL, 0x808754d1e64e2a32UL, 0x5d9dde77353b1a6dUL, 0x11f58c54581fa8b1UL, 0xda90fa7c28c37478UL, 0x5e9a2eafc670a88aUL,
            0x5d9dde77353b1a6dUL, 0x11f58c54581fa8b1UL, 0xda90fa7c28c37478UL, 0x5e9a2eafc670a88aUL,
            0xe35e1bc172e011efUL, 0xbf9255a4450ae7feUL, 0x55f85194e26bc55fUL, 0x4f327873e14d0e54UL,
            0x6a7433bfUL},
            {0xd26285842ff04d44UL, 0x8f38d71341eacca9UL, 0x5ca436f4db7a883cUL, 0xbf41e5376b9f0eecUL, 0x2252d21eb7e1c0e9UL, 0xf4b70a971855e732UL, 0x40c7695aa3662afdUL,
            0xbf41e5376b9f0eecUL, 0x2252d21eb7e1c0e9UL, 0xf4b70a971855e732UL, 0x40c7695aa3662afdUL,
            0x770fe19e16ab73bbUL, 0xd603ebda6393d749UL, 0xe58c62439aa50dbdUL, 0x96d51e5a02d2d7cfUL,
            0x4e6df758UL},
            {0xc6ab830865a6bae6UL, 0x6aa8e8dd4b98815cUL, 0xefe3846713c371e5UL, 0xa1924cbf0b5f9222UL, 0x7f4872369c2b4258UL, 0xcd6da30530f3ea89UL, 0xb7f8b9a704e6cea1UL,
            0xa1924cbf0b5f9222UL, 0x7f4872369c2b4258UL, 0xcd6da30530f3ea89UL, 0xb7f8b9a704e6cea1UL,
            0xfa06ff40433fd535UL, 0xfb1c36fe8f0737f1UL, 0xbb7050561171f80UL, 0xb1bc23235935d897UL,
            0xd57f63eaUL},
            {0x44b3a1929232892UL, 0x61dca0e914fc217UL, 0xa607cc142096b964UL, 0xf7dbc8433c89b274UL, 0x2f5f70581c9b7d32UL, 0x39bf5e5fec82dccaUL, 0x8ade56388901a619UL,
            0xf7dbc8433c89b274UL, 0x2f5f70581c9b7d32UL, 0x39bf5e5fec82dccaUL, 0x8ade56388901a619UL,
            0xc1c6a725caab3ea9UL, 0xc1c7906c2f80b898UL, 0x9c3871a04cc884e6UL, 0xdf01813cbbdf217fUL,
            0x52ef73b3UL},
            {0x4b603d7932a8de4fUL, 0xfae64c464b8a8f45UL, 0x8fafab75661d602aUL, 0x8ffe870ef4adc087UL, 0x65bea2be41f55b54UL, 0x82f3503f636aef1UL, 0x5f78a282378b6bb0UL,
            0x8ffe870ef4adc087UL, 0x65bea2be41f55b54UL, 0x82f3503f636aef1UL, 0x5f78a282378b6bb0UL,
            0x7bf2422c0beceddbUL, 0x9d238d4780114bdUL, 0x7ad198311906597fUL, 0xec8f892c0422aca3UL,
            0x3cb36c3UL},
            {0x4ec0b54cf1566affUL, 0x30d2c7269b206bf4UL, 0x77c22e82295e1061UL, 0x3df9b04434771542UL, 0xfeddce785ccb661fUL, 0xa644aff716928297UL, 0xdd46aee73824b4edUL,
            0x3df9b04434771542UL, 0xfeddce785ccb661fUL, 0xa644aff716928297UL, 0xdd46aee73824b4edUL,
            0xbf8d71879da29b02UL, 0xfc82dccbfc8022a0UL, 0x31bfcd0d9f48d1d3UL, 0xc64ee24d0e7b5f8bUL,
            0x72c39beaUL},
            {0xed8b7a4b34954ff7UL, 0x56432de31f4ee757UL, 0x85bd3abaa572b155UL, 0x7d2c38a926dc1b88UL, 0x5245b9eb4cd6791dUL, 0xfb53ab03b9ad0855UL, 0x3664026c8fc669d7UL,
            0x7d2c38a926dc1b88UL, 0x5245b9eb4cd6791dUL, 0xfb53ab03b9ad0855UL, 0x3664026c8fc669d7UL,
            0x45024d5080bc196UL, 0xb236ebec2cc2740UL, 0x27231ad0e3443be4UL, 0x145780b63f809250UL,
            0xa65aa25cUL},
            {0x5d28b43694176c26UL, 0x714cc8bc12d060aeUL, 0x3437726273a83fe6UL, 0x864b1b28ec16ea86UL, 0x6a78a5a4039ec2b9UL, 0x8e959533e35a766UL, 0x347b7c22b75ae65fUL,
            0x864b1b28ec16ea86UL, 0x6a78a5a4039ec2b9UL, 0x8e959533e35a766UL, 0x347b7c22b75ae65fUL,
            0x5005892bb61e647cUL, 0xfe646519b4a1894dUL, 0xcd801026f74a8a53UL, 0x8713463e9a1ab9ceUL,
            0x74740539UL},
            {0x6a1ef3639e1d202eUL, 0x919bc1bd145ad928UL, 0x30f3f7e48c28a773UL, 0x2e8c49d7c7aaa527UL, 0x5e2328fc8701db7cUL, 0x89ef1afca81f7de8UL, 0xb1857db11985d296UL,
            0x2e8c49d7c7aaa527UL, 0x5e2328fc8701db7cUL, 0x89ef1afca81f7de8UL, 0xb1857db11985d296UL,
            0x17763d695f616115UL, 0xb8f7bf1fcdc8322cUL, 0xcf0c61938ab07a27UL, 0x1122d3e6edb4e866UL,
            0xc3ae3c26UL},
            {0x159f4d9e0307b111UL, 0x3e17914a5675a0cUL, 0xaf849bd425047b51UL, 0x3b69edadf357432bUL, 0x3a2e311c121e6bf2UL, 0x380fad1e288d57e5UL, 0xbf7c7e8ef0e3b83aUL,
            0x3b69edadf357432bUL, 0x3a2e311c121e6bf2UL, 0x380fad1e288d57e5UL, 0xbf7c7e8ef0e3b83aUL,
            0x92966d5f4356ae9bUL, 0x2a03fc66c4d6c036UL, 0x2516d8bddb0d5259UL, 0xb3ffe9737ff5090UL,
            0xf29db8a2UL},
            {0xcc0a840725a7e25bUL, 0x57c69454396e193aUL, 0x976eaf7eee0b4540UL, 0xcd7a46850b95e901UL, 0xc57f7d060dda246fUL, 0x6b9406ead64079bfUL, 0x11b28e20a573b7bdUL,
            0xcd7a46850b95e901UL, 0xc57f7d060dda246fUL, 0x6b9406ead64079bfUL, 0x11b28e20a573b7bdUL,
            0x2d6db356e9369aceUL, 0xdc0afe10fba193UL, 0x5cdb10885dbbfceUL, 0x5c700e205782e35aUL,
            0x1ef4cbf4UL},
            {0xa2b27ee22f63c3f1UL, 0x9ebde0ce1b3976b2UL, 0x2fe6a92a257af308UL, 0x8c1df927a930af59UL, 0xa462f4423c9e384eUL, 0x236542255b2ad8d9UL, 0x595d201a2c19d5bcUL,
            0x8c1df927a930af59UL, 0xa462f4423c9e384eUL, 0x236542255b2ad8d9UL, 0x595d201a2c19d5bcUL,
            0x22c87d4604a67f3UL, 0x585a06eb4bc44c4fUL, 0xb4175a7ac7eabcd8UL, 0xa457d3eeba14ab8cUL,
            0xa9be6c41UL},
            {0xd8f2f234899bcab3UL, 0xb10b037297c3a168UL, 0xdebea2c510ceda7fUL, 0x9498fefb890287ceUL, 0xae68c2be5b1a69a6UL, 0x6189dfba34ed656cUL, 0x91658f95836e5206UL,
            0x9498fefb890287ceUL, 0xae68c2be5b1a69a6UL, 0x6189dfba34ed656cUL, 0x91658f95836e5206UL,
            0xc0bb4fff32aecd4dUL, 0x94125f505a50eef9UL, 0x6ac406e7cfbce5bbUL, 0x344a4b1dcdb7f5d8UL,
            0xfa31801UL},
            {0x584f28543864844fUL, 0xd7cee9fc2d46f20dUL, 0xa38dca5657387205UL, 0x7a0b6dbab9a14e69UL, 0xc6d0a9d6b0e31ac4UL, 0xa674d85812c7cf6UL, 0x63538c0351049940UL,
            0x7a0b6dbab9a14e69UL, 0xc6d0a9d6b0e31ac4UL, 0xa674d85812c7cf6UL, 0x63538c0351049940UL,
            0x9710e5f0bc93d1dUL, 0xc2bea5bd7c54ddd4UL, 0x48739af2bed0d32dUL, 0xba2c4e09e21fba85UL,
            0x8331c5d8UL},
            {0xa94be46dd9aa41afUL, 0xa57e5b7723d3f9bdUL, 0x34bf845a52fd2fUL, 0x843b58463c8df0aeUL, 0x74b258324e916045UL, 0xbdd7353230eb2b38UL, 0xfad31fced7abade5UL,
            0x843b58463c8df0aeUL, 0x74b258324e916045UL, 0xbdd7353230eb2b38UL, 0xfad31fced7abade5UL,
            0x2436aeafb0046f85UL, 0x65bc9af9e5e33161UL, 0x92733b1b3ae90628UL, 0xf48143eaf78a7a89UL,
            0xe9876db8UL},
            {0x9a87bea227491d20UL, 0xa468657e2b9c43e7UL, 0xaf9ba60db8d89ef7UL, 0xcc76f429ea7a12bbUL, 0x5f30eaf2bb14870aUL, 0x434e824cb3e0cd11UL, 0x431a4d382e39d16eUL,
            0xcc76f429ea7a12bbUL, 0x5f30eaf2bb14870aUL, 0x434e824cb3e0cd11UL, 0x431a4d382e39d16eUL,
            0x9e51f913c4773a8UL, 0x32ab1925823d0addUL, 0x99c61b54c1d8f69dUL, 0x38cfb80f02b43b1fUL,
            0x27b0604eUL},
            {0x27688c24958d1a5cUL, 0xe3b4a1c9429cf253UL, 0x48a95811f70d64bcUL, 0x328063229db22884UL, 0x67e9c95f8ba96028UL, 0x7c6bf01c60436075UL, 0xfa55161e7d9030b2UL,
            0x328063229db22884UL, 0x67e9c95f8ba96028UL, 0x7c6bf01c60436075UL, 0xfa55161e7d9030b2UL,
            0xdadbc2f0dab91681UL, 0xda39d7a4934ca11UL, 0x162e845d24c1b45cUL, 0xeb5b9dcd8c6ed31bUL,
            0xdcec07f2UL},
            {0x5d1d37790a1873adUL, 0xed9cd4bcc5fa1090UL, 0xce51cde05d8cd96aUL, 0xf72c26e624407e66UL, 0xa0eb541bdbc6d409UL, 0xc3f40a2f40b3b213UL, 0x6a784de68794492dUL,
            0xf72c26e624407e66UL, 0xa0eb541bdbc6d409UL, 0xc3f40a2f40b3b213UL, 0x6a784de68794492dUL,
            0x10a38a23dbef7937UL, 0x6a5560f853252278UL, 0xc3387bbf3c7b82baUL, 0xfbee7c12eb072805UL,
            0xcff0a82aUL},
            {0x1f03fd18b711eea9UL, 0x566d89b1946d381aUL, 0x6e96e83fc92563abUL, 0x405f66cf8cae1a32UL, 0xd7261740d8f18ce6UL, 0xfea3af64a413d0b2UL, 0xd64d1810e83520feUL,
            0x405f66cf8cae1a32UL, 0xd7261740d8f18ce6UL, 0xfea3af64a413d0b2UL, 0xd64d1810e83520feUL,
            0xe1334a00a580c6e8UL, 0x454049e1b52c15fUL, 0x8895d823d9778247UL, 0xefa7f2e88b826618UL,
            0xfec83621UL},
            {0xf0316f286cf527b6UL, 0xf84c29538de1aa5aUL, 0x7612ed3c923d4a71UL, 0xd4eccebe9393ee8aUL, 0x2eb7867c2318cc59UL, 0x1ce621fd700fe396UL, 0x686450d7a346878aUL,
            0xd4eccebe9393ee8aUL, 0x2eb7867c2318cc59UL, 0x1ce621fd700fe396UL, 0x686450d7a346878aUL,
            0x75a5f37579f8b4cbUL, 0x500cc16eb6541dc7UL, 0xb7b02317b539d9a6UL, 0x3519ddff5bc20a29UL,
            0x743d8dcUL},
            {0x297008bcb3e3401dUL, 0x61a8e407f82b0c69UL, 0xa4a35bff0524fa0eUL, 0x7a61d8f552a53442UL, 0x821d1d8d8cfacf35UL, 0x7cc06361b86d0559UL, 0x119b617a8c2be199UL,
            0x7a61d8f552a53442UL, 0x821d1d8d8cfacf35UL, 0x7cc06361b86d0559UL, 0x119b617a8c2be199UL,
            0x2996487da6721759UL, 0x61a901376070b91dUL, 0xd88dee12ae9c9b3cUL, 0x5665491be1fa53a7UL,
            0x64d41d26UL},
            {0x43c6252411ee3beUL, 0xb4ca1b8077777168UL, 0x2746dc3f7da1737fUL, 0x2247a4b2058d1c50UL, 0x1b3fa184b1d7bcc0UL, 0xdeb85613995c06edUL, 0xcbe1d957485a3ccdUL,
            0x2247a4b2058d1c50UL, 0x1b3fa184b1d7bcc0UL, 0xdeb85613995c06edUL, 0xcbe1d957485a3ccdUL,
            0xdfe241f8f33c96b6UL, 0x6597eb05019c2109UL, 0xda344b2a63a219cfUL, 0x79b8e3887612378aUL,
            0xacd90c81UL},
            {0xce38a9a54fad6599UL, 0x6d6f4a90b9e8755eUL, 0xc3ecc79ff105de3fUL, 0xe8b9ee96efa2d0eUL, 0x90122905c4ab5358UL, 0x84f80c832d71979cUL, 0x229310f3ffbbf4c6UL,
            0xe8b9ee96efa2d0eUL, 0x90122905c4ab5358UL, 0x84f80c832d71979cUL, 0x229310f3ffbbf4c6UL,
            0xcc9eb42100cd63a7UL, 0x7a283f2f3da7b9fUL, 0x359b061d314e7a72UL, 0xd0d959720028862UL,
            0x7c746a4bUL},
            {0x270a9305fef70cfUL, 0x600193999d884f3aUL, 0xf4d49eae09ed8a1UL, 0x2e091b85660f1298UL, 0xbfe37fae1cdd64c9UL, 0x8dddfbab930f6494UL, 0x2ccf4b08f5d417aUL,
            0x2e091b85660f1298UL, 0xbfe37fae1cdd64c9UL, 0x8dddfbab930f6494UL, 0x2ccf4b08f5d417aUL,
            0x365c2ee85582fe6UL, 0xdee027bcd36db62aUL, 0xb150994d3c7e5838UL, 0xfdfd1a0e692e436dUL,
            0xb1047e99UL},
            {0xe71be7c28e84d119UL, 0xeb6ace59932736e6UL, 0x70c4397807ba12c5UL, 0x7a9d77781ac53509UL, 0x4489c3ccfda3b39cUL, 0xfa722d4f243b4964UL, 0x25f15800bffdd122UL,
            0x7a9d77781ac53509UL, 0x4489c3ccfda3b39cUL, 0xfa722d4f243b4964UL, 0x25f15800bffdd122UL,
            0xed85e4157fbd3297UL, 0xaab1967227d59efdUL, 0x2199631212eb3839UL, 0x3e4c19359aae1cc2UL,
            0xd1fd1068UL},
            {0xb5b58c24b53aaa19UL, 0xd2a6ab0773dd897fUL, 0xef762fe01ecb5b97UL, 0x9deefbcfa4cab1f1UL, 0xb58f5943cd2492baUL, 0xa96dcc4d1f4782a7UL, 0x102b62a82309dde5UL,
            0x9deefbcfa4cab1f1UL, 0xb58f5943cd2492baUL, 0xa96dcc4d1f4782a7UL, 0x102b62a82309dde5UL,
            0x35fe52684763b338UL, 0xafe2616651eaad1fUL, 0x43e38715bdfa05e7UL, 0x83c9ba83b5ec4a40UL,
            0x56486077UL},
            {0x44dd59bd301995cfUL, 0x3ccabd76493ada1aUL, 0x540db4c87d55ef23UL, 0xcfc6d7adda35797UL, 0x14c7d1f32332cf03UL, 0x2d553ffbff3be99dUL, 0xc91c4ee0cb563182UL,
            0xcfc6d7adda35797UL, 0x14c7d1f32332cf03UL, 0x2d553ffbff3be99dUL, 0xc91c4ee0cb563182UL,
            0x9aa5e507f49136f0UL, 0x760c5dd1a82c4888UL, 0xbeea7e974a1cfb5cUL, 0x640b247774fe4bf7UL,
            0x6069be80UL},
            {0xb4d4789eb6f2630bUL, 0xbf6973263ce8ef0eUL, 0xd1c75c50844b9d3UL, 0xbce905900c1ec6eaUL, 0xc30f304f4045487dUL, 0xa5c550166b3a142bUL, 0x2f482b4e35327287UL,
            0xbce905900c1ec6eaUL, 0xc30f304f4045487dUL, 0xa5c550166b3a142bUL, 0x2f482b4e35327287UL,
            0x15b21ddddf355438UL, 0x496471fa3006babUL, 0x2a8fd458d06c1a32UL, 0xdb91e8ae812f0b8dUL,
            0x2078359bUL},
            {0x12807833c463737cUL, 0x58e927ea3b3776b4UL, 0x72dd20ef1c2f8ad0UL, 0x910b610de7a967bfUL, 0x801bc862120f6bf5UL, 0x9653efeed5897681UL, 0xf5367ff83e9ebbb3UL,
            0x910b610de7a967bfUL, 0x801bc862120f6bf5UL, 0x9653efeed5897681UL, 0xf5367ff83e9ebbb3UL,
            0xcf56d489afd1b0bfUL, 0xc7c793715cae3de8UL, 0x631f91d64abae47cUL, 0x5f1f42fb14a444a2UL,
            0x9ea21004UL},
            {0xe88419922b87176fUL, 0xbcf32f41a7ddbf6fUL, 0xd6ebefd8085c1a0fUL, 0xd1d44fe99451ef72UL, 0xec951ba8e51e3545UL, 0xc0ca86b360746e96UL, 0xaa679cc066a8040bUL,
            0xd1d44fe99451ef72UL, 0xec951ba8e51e3545UL, 0xc0ca86b360746e96UL, 0xaa679cc066a8040bUL,
            0x51065861ece6ffc1UL, 0x76777368a2997e11UL, 0x87f278f46731100cUL, 0xbbaa4140bdba4527UL,
            0x9c9cfe88UL},
            {0x105191e0ec8f7f60UL, 0x5918dbfcca971e79UL, 0x6b285c8a944767b9UL, 0xd3e86ac4f5eccfa4UL, 0xe5399df2b106ca1UL, 0x814aadfacd217f1dUL, 0x2754e3def1c405a9UL,
            0xd3e86ac4f5eccfa4UL, 0xe5399df2b106ca1UL, 0x814aadfacd217f1dUL, 0x2754e3def1c405a9UL,
            0x99290323b9f06e74UL, 0xa9782e043f271461UL, 0x13c8b3b8c275a860UL, 0x6038d620e581e9e7UL,
            0xb70a6dddUL},
            {0xa5b88bf7399a9f07UL, 0xfca3ddfd96461cc4UL, 0xebe738fdc0282fc6UL, 0x69afbc800606d0fbUL, 0x6104b97a9db12df7UL, 0xfcc09198bb90bf9fUL, 0xc5e077e41a65ba91UL,
            0x69afbc800606d0fbUL, 0x6104b97a9db12df7UL, 0xfcc09198bb90bf9fUL, 0xc5e077e41a65ba91UL,
            0xdb261835ee8aa08eUL, 0xdb0ee662e5796dc9UL, 0xfc1880ecec499e5fUL, 0x648866fbe1502034UL,
            0xdea37298UL},
            {0xd08c3f5747d84f50UL, 0x4e708b27d1b6f8acUL, 0x70f70fd734888606UL, 0x909ae019d761d019UL, 0x368bf4aab1b86ef9UL, 0x308bd616d5460239UL, 0x4fd33269f76783eaUL,
            0x909ae019d761d019UL, 0x368bf4aab1b86ef9UL, 0x308bd616d5460239UL, 0x4fd33269f76783eaUL,
            0x7d53b37c19713eabUL, 0x6bba6eabda58a897UL, 0x91abb50efc116047UL, 0x4e902f347e0e0e35UL,
            0x8f480819UL},
            {0x2f72d12a40044b4bUL, 0x889689352fec53deUL, 0xf03e6ad87eb2f36UL, 0xef79f28d874b9e2dUL, 0xb512089e8e63b76cUL, 0x24dc06833bf193a9UL, 0x3c23308ba8e99d7eUL,
            0xef79f28d874b9e2dUL, 0xb512089e8e63b76cUL, 0x24dc06833bf193a9UL, 0x3c23308ba8e99d7eUL,
            0x5ceff7b85cacefb7UL, 0xef390338898cd73UL, 0xb12967d7d2254f54UL, 0xde874cbd8aef7b75UL,
            0x30b3b16UL},
            {0xaa1f61fdc5c2e11eUL, 0xc2c56cd11277ab27UL, 0xa1e73069fdf1f94fUL, 0x8184bab36bb79df0UL, 0xc81929ce8655b940UL, 0x301b11bf8a4d8ce8UL, 0x73126fd45ab75de9UL,
            0x8184bab36bb79df0UL, 0xc81929ce8655b940UL, 0x301b11bf8a4d8ce8UL, 0x73126fd45ab75de9UL,
            0x4bd6f76e4888229aUL, 0x9aae355b54a756d5UL, 0xca3de9726f6e99d5UL, 0x83f80cac5bc36852UL,
            0xf31bc4e8UL},
            {0x9489b36fe2246244UL, 0x3355367033be74b8UL, 0x5f57c2277cbce516UL, 0xbc61414f9802ecafUL, 0x8edd1e7a50562924UL, 0x48f4ab74a35e95f2UL, 0xcc1afcfd99a180e7UL,
            0xbc61414f9802ecafUL, 0x8edd1e7a50562924UL, 0x48f4ab74a35e95f2UL, 0xcc1afcfd99a180e7UL,
            0x517dd5e3acf66110UL, 0x7dd3ad9e8978b30dUL, 0x1f6d5dfc70de812bUL, 0x947daaba6441aaf3UL,
            0x419f953bUL},
            {0x358d7c0476a044cdUL, 0xe0b7b47bcbd8854fUL, 0xffb42ec696705519UL, 0xd45e44c263e95c38UL, 0xdf61db53923ae3b1UL, 0xf2bc948cc4fc027cUL, 0x8a8000c6066772a3UL,
            0xd45e44c263e95c38UL, 0xdf61db53923ae3b1UL, 0xf2bc948cc4fc027cUL, 0x8a8000c6066772a3UL,
            0x9fd93c942d31fa17UL, 0xd7651ecebe09cbd3UL, 0x68682cefb6a6f165UL, 0x541eb99a2dcee40eUL,
            0x20e9e76dUL},
            {0xb0c48df14275265aUL, 0x9da4448975905efaUL, 0xd716618e414ceb6dUL, 0x30e888af70df1e56UL, 0x4bee54bd47274f69UL, 0x178b4059e1a0afe5UL, 0x6e2c96b7f58e5178UL,
            0x30e888af70df1e56UL, 0x4bee54bd47274f69UL, 0x178b4059e1a0afe5UL, 0x6e2c96b7f58e5178UL,
            0xbb429d3b9275e9bcUL, 0xc198013f09cafdc6UL, 0xec0a6ee4fb5de348UL, 0x744e1e8ed2eb1eb0UL,
            0x646f0ff8UL},
            {0xdaa70bb300956588UL, 0x410ea6883a240c6dUL, 0xf5c8239fb5673eb3UL, 0x8b1d7bb4903c105fUL, 0xcfb1c322b73891d4UL, 0x5f3b792b22f07297UL, 0xfd64061f8be86811UL,
            0x8b1d7bb4903c105fUL, 0xcfb1c322b73891d4UL, 0x5f3b792b22f07297UL, 0xfd64061f8be86811UL,
            0x1d2db712921cfc2bUL, 0xcd1b2b2f2cee18aeUL, 0x6b6f8790dc7feb09UL, 0x46c179efa3f0f518UL,
            0xeeb7eca8UL},
            {0x4ec97a20b6c4c7c2UL, 0x5913b1cd454f29fdUL, 0xa9629f9daf06d685UL, 0x852c9499156a8f3UL, 0x3a180a6abfb79016UL, 0x9fc3c4764037c3c9UL, 0x2890c42fc0d972cfUL,
            0x852c9499156a8f3UL, 0x3a180a6abfb79016UL, 0x9fc3c4764037c3c9UL, 0x2890c42fc0d972cfUL,
            0x1f92231d4e537651UL, 0xfab8bb07aa54b7b9UL, 0xe05d2d771c485ed4UL, 0xd50b34bf808ca731UL,
            0x8112bb9UL},
            {0x5c3323628435a2e8UL, 0x1bea45ce9e72a6e3UL, 0x904f0a7027ddb52eUL, 0x939f31de14dcdc7bUL, 0xa68fdf4379df068UL, 0xf169e1f0b835279dUL, 0x7498e432f9619b27UL,
            0x939f31de14dcdc7bUL, 0xa68fdf4379df068UL, 0xf169e1f0b835279dUL, 0x7498e432f9619b27UL,
            0x1aa2a1f11088e785UL, 0xd6ad72f45729de78UL, 0x9a63814157c80267UL, 0x55538e35c648e435UL,
            0x85a6d477UL},
            {0xc1ef26bea260abdbUL, 0x6ee423f2137f9280UL, 0xdf2118b946ed0b43UL, 0x11b87fb1b900cc39UL, 0xe33e59b90dd815b1UL, 0xaa6cb5c4bafae741UL, 0x739699951ca8c713UL,
            0x11b87fb1b900cc39UL, 0xe33e59b90dd815b1UL, 0xaa6cb5c4bafae741UL, 0x739699951ca8c713UL,
            0x2b4389a967310077UL, 0x1d5382568a31c2c9UL, 0x55d1e787fbe68991UL, 0x277c254bc31301e7UL,
            0x56f76c84UL},
            {0x6be7381b115d653aUL, 0xed046190758ea511UL, 0xde6a45ffc3ed1159UL, 0xa64760e4041447d0UL, 0xe3eac49f3e0c5109UL, 0xdd86c4d4cb6258e2UL, 0xefa9857afd046c7fUL,
            0xa64760e4041447d0UL, 0xe3eac49f3e0c5109UL, 0xdd86c4d4cb6258e2UL, 0xefa9857afd046c7fUL,
            0xfab793dae8246f16UL, 0xc9e3b121b31d094cUL, 0xa2a0f55858465226UL, 0xdba6f0ff39436344UL,
            0x9af45d55UL},
            {0xae3eece1711b2105UL, 0x14fd3f4027f81a4aUL, 0xabb7e45177d151dbUL, 0x501f3e9b18861e44UL, 0x465201170074e7d8UL, 0x96d5c91970f2cb12UL, 0x40fd28c43506c95dUL,
            0x501f3e9b18861e44UL, 0x465201170074e7d8UL, 0x96d5c91970f2cb12UL, 0x40fd28c43506c95dUL,
            0xe86c4b07802aaff3UL, 0xf317d14112372a70UL, 0x641b13e587711650UL, 0x4915421ab1090eaaUL,
            0xd1c33760UL},
            {0x376c28588b8fb389UL, 0x6b045e84d8491ed2UL, 0x4e857effb7d4e7dcUL, 0x154dd79fd2f984b4UL, 0xf11171775622c1c3UL, 0x1fbe30982e78e6f0UL, 0xa460a15dcf327e44UL,
            0x154dd79fd2f984b4UL, 0xf11171775622c1c3UL, 0x1fbe30982e78e6f0UL, 0xa460a15dcf327e44UL,
            0xf359e0900cc3d582UL, 0x7e11070447976d00UL, 0x324e6daf276ea4b5UL, 0x7aa6e2df0cc94fa2UL,
            0xc56bbf69UL},
            {0x58d943503bb6748fUL, 0x419c6c8e88ac70f6UL, 0x586760cbf3d3d368UL, 0xb7e164979d5ccfc1UL, 0x12cb4230d26bf286UL, 0xf1bf910d44bd84cbUL, 0xb32c24c6a40272UL,
            0xb7e164979d5ccfc1UL, 0x12cb4230d26bf286UL, 0xf1bf910d44bd84cbUL, 0xb32c24c6a40272UL,
            0x11ed12e34c48c039UL, 0xb0c2538e51d0a6acUL, 0x4269bb773e1d553aUL, 0xe35a9dbabd34867UL,
            0xabecfb9bUL},
            {0xdfff5989f5cfd9a1UL, 0xbcee2e7ea3a96f83UL, 0x681c7874adb29017UL, 0x3ff6c8ac7c36b63aUL, 0x48bc8831d849e326UL, 0x30b078e76b0214e2UL, 0x42954e6ad721b920UL,
            0x3ff6c8ac7c36b63aUL, 0x48bc8831d849e326UL, 0x30b078e76b0214e2UL, 0x42954e6ad721b920UL,
            0xf9aeb33d164b4472UL, 0x7b353b110831dbdcUL, 0x16f64c82f44ae17bUL, 0xb71244cc164b3b2bUL,
            0x8de13255UL},
            {0x7fb19eb1a496e8f5UL, 0xd49e5dfdb5c0833fUL, 0xc0d5d7b2f7c48dc7UL, 0x1a57313a32f22ddeUL, 0x30af46e49850bf8bUL, 0xaa0fe8d12f808f83UL, 0x443e31d70873bb6bUL,
            0x1a57313a32f22ddeUL, 0x30af46e49850bf8bUL, 0xaa0fe8d12f808f83UL, 0x443e31d70873bb6bUL,
            0xbbeb67c49c9fdc13UL, 0x18f1e2a88f59f9d5UL, 0xfb1b05038e5def11UL, 0xd0450b5ce4c39c52UL,
            0xa98ee299UL},
            {0x5dba5b0dadccdbaaUL, 0x4ba8da8ded87fcdcUL, 0xf693fdd25badf2f0UL, 0xe9029e6364286587UL, 0xae69f49ecb46726cUL, 0x18e002679217c405UL, 0xbd6d66e85332ae9fUL,
            0xe9029e6364286587UL, 0xae69f49ecb46726cUL, 0x18e002679217c405UL, 0xbd6d66e85332ae9fUL,
            0x6bf330b1c353dd2aUL, 0x74e9f2e71e3a4152UL, 0x3f85560b50f6c413UL, 0xd33a52a47eaed2b4UL,
            0x3015f556UL},
            {0x688bef4b135a6829UL, 0x8d31d82abcd54e8eUL, 0xf95f8a30d55036d7UL, 0x3d8c90e27aa2e147UL, 0x2ec937ce0aa236b4UL, 0x89b563996d3a0b78UL, 0x39b02413b23c3f08UL,
            0x3d8c90e27aa2e147UL, 0x2ec937ce0aa236b4UL, 0x89b563996d3a0b78UL, 0x39b02413b23c3f08UL,
            0x8d475a2e64faf2d2UL, 0x48567f7dca46ecafUL, 0x254cda08d5f87a6dUL, 0xec6ae9f729c47039UL,
            0x5a430e29UL},
            {0xd8323be05433a412UL, 0x8d48fa2b2b76141dUL, 0x3d346f23978336a5UL, 0x4d50c7537562033fUL, 0x57dc7625b61dfe89UL, 0x9723a9f4c08ad93aUL, 0x5309596f48ab456bUL,
            0x4d50c7537562033fUL, 0x57dc7625b61dfe89UL, 0x9723a9f4c08ad93aUL, 0x5309596f48ab456bUL,
            0x7e453088019d220fUL, 0x8776067ba6ab9714UL, 0x67e1d06bd195de39UL, 0x74a1a32f8994b918UL,
            0x2797add0UL},
            {0x3b5404278a55a7fcUL, 0x23ca0b327c2d0a81UL, 0xa6d65329571c892cUL, 0x45504801e0e6066bUL, 0x86e6c6d6152a3d04UL, 0x4f3db1c53eca2952UL, 0xd24d69b3e9ef10f3UL,
            0x45504801e0e6066bUL, 0x86e6c6d6152a3d04UL, 0x4f3db1c53eca2952UL, 0xd24d69b3e9ef10f3UL,
            0x93a0de2219e66a70UL, 0x8932c7115ccb1f8aUL, 0x5ef503fdf2841a8cUL, 0x38064dd9efa80a41UL,
            0x27d55016UL},
            {0x2a96a3f96c5e9bbcUL, 0x8caf8566e212dda8UL, 0x904de559ca16e45eUL, 0xf13bc2d9c2fe222eUL, 0xbe4ccec9a6cdccfdUL, 0x37b2cbdd973a3ac9UL, 0x7b3223cd9c9497beUL,
            0xf13bc2d9c2fe222eUL, 0xbe4ccec9a6cdccfdUL, 0x37b2cbdd973a3ac9UL, 0x7b3223cd9c9497beUL,
            0xd5904440f376f889UL, 0x62b13187699c473cUL, 0x4751b89251f26726UL, 0x9500d84fa3a61ba8UL,
            0x84945a82UL},
            {0x22bebfdcc26d18ffUL, 0x4b4d8dcb10807ba1UL, 0x40265eee30c6b896UL, 0x3752b423073b119aUL, 0x377dc5eb7c662bdbUL, 0x2b9f07f93a6c25b9UL, 0x96f24ede2bdc0718UL,
            0x3752b423073b119aUL, 0x377dc5eb7c662bdbUL, 0x2b9f07f93a6c25b9UL, 0x96f24ede2bdc0718UL,
            0xf7699b12c31417bdUL, 0x17b366f401c58b2UL, 0xbf60188d5f437b37UL, 0x484436e56df17f04UL,
            0x3ef7e224UL},
            {0x627a2249ec6bbcc2UL, 0xc0578b462a46735aUL, 0x4974b8ee1c2d4f1fUL, 0xebdbb918eb6d837fUL, 0x8fb5f218dd84147cUL, 0xc77dd1f881df2c54UL, 0x62eac298ec226dc3UL,
            0xebdbb918eb6d837fUL, 0x8fb5f218dd84147cUL, 0xc77dd1f881df2c54UL, 0x62eac298ec226dc3UL,
            0x43eded83c4b60bd0UL, 0x9a0a403b5487503bUL, 0x25f305d9147f0bdaUL, 0x3ad417f511bc1e64UL,
            0x35ed8dc8UL},
            {0x3abaf1667ba2f3e0UL, 0xee78476b5eeadc1UL, 0x7e56ac0a6ca4f3f4UL, 0xf1b9b413df9d79edUL, 0xa7621b6fd02db503UL, 0xd92f7ba9928a4ffeUL, 0x53f56babdcae96a6UL,
            0xf1b9b413df9d79edUL, 0xa7621b6fd02db503UL, 0xd92f7ba9928a4ffeUL, 0x53f56babdcae96a6UL,
            0x5302b89fc48713abUL, 0xd03e3b04dbe7a2f2UL, 0xfa74ef8af6d376a7UL, 0x103c8cdea1050ef2UL,
            0x6a75e43dUL},
            {0x3931ac68c5f1b2c9UL, 0xefe3892363ab0fb0UL, 0x40b707268337cd36UL, 0xa53a6b64b1ac85c9UL, 0xd50e7f86ee1b832bUL, 0x7bab08fdd26ba0a4UL, 0x7587743c18fe2475UL,
            0xa53a6b64b1ac85c9UL, 0xd50e7f86ee1b832bUL, 0x7bab08fdd26ba0a4UL, 0x7587743c18fe2475UL,
            0xe3b5d5d490cf5761UL, 0xdfc053f7d065edd5UL, 0x42ffd8d5fb70129fUL, 0x599ca38677cccdc3UL,
            0x235d9805UL},
            {0xb98fb0606f416754UL, 0x46a6e5547ba99c1eUL, 0xc909d82112a8ed2UL, 0xdbfaae9642b3205aUL, 0xf676a1339402bcb9UL, 0xf4f12a5b1ac11f29UL, 0x7db8bad81249dee4UL,
            0xdbfaae9642b3205aUL, 0xf676a1339402bcb9UL, 0xf4f12a5b1ac11f29UL, 0x7db8bad81249dee4UL,
            0xb26e46f2da95922eUL, 0x2aaedd5e12e3c611UL, 0xa0e2d9082966074UL, 0xc64da8a167add63dUL,
            0xf7d69572UL},
            {0x7f7729a33e58fcc4UL, 0x2e4bc1e7a023ead4UL, 0xe707008ea7ca6222UL, 0x47418a71800334a0UL, 0xd10395d8fc64d8a4UL, 0x8257a30062cb66fUL, 0x6786f9b2dc1ff18aUL,
            0x47418a71800334a0UL, 0xd10395d8fc64d8a4UL, 0x8257a30062cb66fUL, 0x6786f9b2dc1ff18aUL,
            0x5633f437bb2f180fUL, 0xe5a3a405737d22d6UL, 0xca0ff1ef6f7f0b74UL, 0xd0ae600684b16df8UL,
            0xbacd0199UL},
            {0x42a0aa9ce82848b3UL, 0x57232730e6bee175UL, 0xf89bb3f370782031UL, 0xcaa33cf9b4f6619cUL, 0xb2c8648ad49c209fUL, 0x9e89ece0712db1c0UL, 0x101d8274a711a54bUL,
            0xcaa33cf9b4f6619cUL, 0xb2c8648ad49c209fUL, 0x9e89ece0712db1c0UL, 0x101d8274a711a54bUL,
            0x538e79f1e70135cdUL, 0xe1f5a76f983c844eUL, 0x653c082fd66088fcUL, 0x1b9c9b464b654958UL,
            0xe428f50eUL},
            {0x6b2c6d38408a4889UL, 0xde3ef6f68fb25885UL, 0x20754f456c203361UL, 0x941f5023c0c943f9UL, 0xdfdeb9564fd66f24UL, 0x2140cec706b9d406UL, 0x7b22429b131e9c72UL,
            0x941f5023c0c943f9UL, 0xdfdeb9564fd66f24UL, 0x2140cec706b9d406UL, 0x7b22429b131e9c72UL,
            0x94215c22eb940f45UL, 0xd28b9ed474f7249aUL, 0x6f25e88f2fbf9f56UL, 0xb6718f9e605b38acUL,
            0x81eaaad3UL},
            {0x930380a3741e862aUL, 0x348d28638dc71658UL, 0x89dedcfd1654ea0dUL, 0x7e7f61684080106UL, 0x837ace9794582976UL, 0x5ac8ca76a357eb1bUL, 0x32b58308625661fbUL,
            0x7e7f61684080106UL, 0x837ace9794582976UL, 0x5ac8ca76a357eb1bUL, 0x32b58308625661fbUL,
            0xc09705c4572025d9UL, 0xf9187f6af0291303UL, 0x1c0edd8ee4b02538UL, 0xe6cb105daa0578aUL,
            0xaddbd3e3UL},
            {0x94808b5d2aa25f9aUL, 0xcec72968128195e0UL, 0xd9f4da2bdc1e130fUL, 0x272d8dd74f3006ccUL, 0xec6c2ad1ec03f554UL, 0x4ad276b249a5d5ddUL, 0x549a22a17c0cde12UL,
            0x272d8dd74f3006ccUL, 0xec6c2ad1ec03f554UL, 0x4ad276b249a5d5ddUL, 0x549a22a17c0cde12UL,
            0x602119cb824d7cdeUL, 0xf4d3cef240ef35faUL, 0xe889895e01911bc7UL, 0x785a7e5ac20e852bUL,
            0xe66dbca0UL},
            {0xb31abb08ae6e3d38UL, 0x9eb9a95cbd9e8223UL, 0x8019e79b7ee94ea9UL, 0x7b2271a7a3248e22UL, 0x3b4f700e5a0ba523UL, 0x8ebc520c227206feUL, 0xda3f861490f5d291UL,
            0x7b2271a7a3248e22UL, 0x3b4f700e5a0ba523UL, 0x8ebc520c227206feUL, 0xda3f861490f5d291UL,
            0xd08a689f9f3aa60eUL, 0x547c1b97a068661fUL, 0x4b15a67fa29172f0UL, 0xeaf40c085191d80fUL,
            0xafe11fd5UL},
            {0xdccb5534a893ea1aUL, 0xce71c398708c6131UL, 0xfe2396315457c164UL, 0x3f1229f4d0fd96fbUL, 0x33130aa5fa9d43f2UL, 0xe42693d5b34e63abUL, 0x2f4ef2be67f62104UL,
            0x3f1229f4d0fd96fbUL, 0x33130aa5fa9d43f2UL, 0xe42693d5b34e63abUL, 0x2f4ef2be67f62104UL,
            0x372e5153516e37b9UL, 0xaf9ec142ab12cc86UL, 0x777920c09345e359UL, 0xe7c4a383bef8adc6UL,
            0xa71a406fUL},
            {0x6369163565814de6UL, 0x8feb86fb38d08c2fUL, 0x4976933485cc9a20UL, 0x7d3e82d5ba29a90dUL, 0xd5983cc93a9d126aUL, 0x37e9dfd950e7b692UL, 0x80673be6a7888b87UL,
            0x7d3e82d5ba29a90dUL, 0xd5983cc93a9d126aUL, 0x37e9dfd950e7b692UL, 0x80673be6a7888b87UL,
            0x57f732dc600808bcUL, 0x59477199802cc78bUL, 0xf824810eb8f2c2deUL, 0xc4a3437f05b3b61cUL,
            0x9d90eaf5UL},
            {0xedee4ff253d9f9b3UL, 0x96ef76fb279ef0adUL, 0xa4d204d179db2460UL, 0x1f3dcdfa513512d6UL, 0x4dc7ec07283117e4UL, 0x4438bae88ae28bf9UL, 0xaa7eae72c9244a0dUL,
            0x1f3dcdfa513512d6UL, 0x4dc7ec07283117e4UL, 0x4438bae88ae28bf9UL, 0xaa7eae72c9244a0dUL,
            0xb9aedc8d3ecc72dfUL, 0xb75a8eb090a77d62UL, 0x6b15677f9cd91507UL, 0x51d8282cb3a9ddbfUL,
            0x6665db10UL},
            {0x941993df6e633214UL, 0x929bc1beca5b72c6UL, 0x141fc52b8d55572dUL, 0xb3b782ad308f21edUL, 0x4f2676485041dee0UL, 0xbfe279aed5cb4bc8UL, 0x2a62508a467a22ffUL,
            0xb3b782ad308f21edUL, 0x4f2676485041dee0UL, 0xbfe279aed5cb4bc8UL, 0x2a62508a467a22ffUL,
            0xe74d29eab742385dUL, 0x56b05cd90ecfc293UL, 0xc603728ea73f8844UL, 0x8638fcd21bc692c4UL,
            0x9c977cbfUL},
            {0x859838293f64cd4cUL, 0x484403b39d44ad79UL, 0xbf674e64d64b9339UL, 0x44d68afda9568f08UL, 0x478568ed51ca1d65UL, 0x679c204ad3d9e766UL, 0xb28e788878488dc1UL,
            0x44d68afda9568f08UL, 0x478568ed51ca1d65UL, 0x679c204ad3d9e766UL, 0xb28e788878488dc1UL,
            0xd001a84d3a84fae6UL, 0xd376958fe4cb913eUL, 0x17435277e36c86f0UL, 0x23657b263c347aa6UL,
            0xee83ddd4UL},
            {0xc19b5648e0d9f555UL, 0x328e47b2b7562993UL, 0xe756b92ba4bd6a51UL, 0xc3314e362764ddb8UL, 0x6481c084ee9ec6b5UL, 0xede23fb9a251771UL, 0xbd617f2643324590UL,
            0xc3314e362764ddb8UL, 0x6481c084ee9ec6b5UL, 0xede23fb9a251771UL, 0xbd617f2643324590UL,
            0xd2d30c9b95e030f5UL, 0x8a517312ffc5795eUL, 0x8b1f325033bd535eUL, 0x3ee6e867e03f2892UL,
            0x26519ccUL},
            {0xf963b63b9006c248UL, 0x9e9bf727ffaa00bcUL, 0xc73bacc75b917e3aUL, 0x2c6aa706129cc54cUL, 0x17a706f59a49f086UL, 0xc7c1eec455217145UL, 0x6adfdc6e07602d42UL,
            0x2c6aa706129cc54cUL, 0x17a706f59a49f086UL, 0xc7c1eec455217145UL, 0x6adfdc6e07602d42UL,
            0xfb75fca30d848dd2UL, 0x5228c9ed14653ed4UL, 0x953958910153b1a2UL, 0xa430103a24f42a5dUL,
            0xa485a53fUL},
            {0x6a8aa0852a8c1f3bUL, 0xc8f1e5e206a21016UL, 0x2aa554aed1ebb524UL, 0xfc3e3c322cd5d89bUL, 0xb7e3911dc2bd4ebbUL, 0xfcd6da5e5fae833aUL, 0x51ed3c41f87f9118UL,
            0xfc3e3c322cd5d89bUL, 0xb7e3911dc2bd4ebbUL, 0xfcd6da5e5fae833aUL, 0x51ed3c41f87f9118UL,
            0xf31750cbc19c420aUL, 0x186dab1abada1d86UL, 0xca7f88cb894b3cd7UL, 0x2859eeb1c373790cUL,
            0xf62bc412UL},
            {0x740428b4d45e5fb8UL, 0x4c95a4ce922cb0a5UL, 0xe99c3ba78feae796UL, 0x914f1ea2fdcebf5cUL, 0x9566453c07cd0601UL, 0x9841bf66d0462cdUL, 0x79140c1c18536aebUL,
            0x914f1ea2fdcebf5cUL, 0x9566453c07cd0601UL, 0x9841bf66d0462cdUL, 0x79140c1c18536aebUL,
            0xa963b930b05820c2UL, 0x6a7d9fa0c8c45153UL, 0x64214c40d07cf39bUL, 0x7057daf1d806c014UL,
            0x8975a436UL},
            {0x658b883b3a872b86UL, 0x2f0e303f0f64827aUL, 0x975337e23dc45e1UL, 0x99468a917986162bUL, 0x7b31434aac6e0af0UL, 0xf6915c1562c7d82fUL, 0xe4071d82a6dd71dbUL,
            0x99468a917986162bUL, 0x7b31434aac6e0af0UL, 0xf6915c1562c7d82fUL, 0xe4071d82a6dd71dbUL,
            0x5f5331f077b5d996UL, 0x7b314ba21b747a4fUL, 0x5a73cb9521da17f5UL, 0x12ed435fae286d86UL,
            0x94ff7f41UL},
            {0x6df0a977da5d27d4UL, 0x891dd0e7cb19508UL, 0xfd65434a0b71e680UL, 0x8799e4740e573c50UL, 0x9e739b52d0f341e8UL, 0xcdfd34ba7d7b03ebUL, 0x5061812ce6c88499UL,
            0x8799e4740e573c50UL, 0x9e739b52d0f341e8UL, 0xcdfd34ba7d7b03ebUL, 0x5061812ce6c88499UL,
            0x612b8d8f2411dc5cUL, 0x878bd883d29c7787UL, 0x47a846727182bbUL, 0xec4949508c8b3b9aUL,
            0x760aa031UL},
            {0xa900275464ae07efUL, 0x11f2cfda34beb4a3UL, 0x9abf91e5a1c38e4UL, 0x8063d80ab26f3d6dUL, 0x4177b4b9b4f0393fUL, 0x6de42ba8672b9640UL, 0xd0bccdb72c51c18UL,
            0x8063d80ab26f3d6dUL, 0x4177b4b9b4f0393fUL, 0x6de42ba8672b9640UL, 0xd0bccdb72c51c18UL,
            0xaf3f611b7f22cf12UL, 0x3863c41492645755UL, 0x928c7a616a8f14f9UL, 0xa82c78eb2eadc58bUL,
            0x3bda76dfUL},
            {0x810bc8aa0c40bcb0UL, 0x448a019568d01441UL, 0xf60ec52f60d3aeaeUL, 0x52c44837aa6dfc77UL, 0x15d8d8fccdd6dc5bUL, 0x345b793ccfa93055UL, 0x932160fe802ca975UL,
            0x52c44837aa6dfc77UL, 0x15d8d8fccdd6dc5bUL, 0x345b793ccfa93055UL, 0x932160fe802ca975UL,
            0xa624b0dd93fc18cdUL, 0xd955b254c2037f1eUL, 0xe540533d370a664cUL, 0x2ba4ec12514e9d7UL,
            0x498e2e65UL},
            {0x22036327deb59ed7UL, 0xadc05ceb97026a02UL, 0x48bff0654262672bUL, 0xc791b313aba3f258UL, 0x443c7757a4727beeUL, 0xe30e4b2372171bdfUL, 0xf3db986c4156f3cbUL,
            0xc791b313aba3f258UL, 0x443c7757a4727beeUL, 0xe30e4b2372171bdfUL, 0xf3db986c4156f3cbUL,
            0xa939aefab97c6e15UL, 0xdbeb8acf1d5b0e6cUL, 0x1e0eab667a795bbaUL, 0x80dd539902df4d50UL,
            0xd38deb48UL},
            {0x7d14dfa9772b00c8UL, 0x595735efc7eeaed7UL, 0x29872854f94c3507UL, 0xbc241579d8348401UL, 0x16dc832804d728f0UL, 0xe9cc71ae64e3f09eUL, 0xbef634bc978bac31UL,
            0xbc241579d8348401UL, 0x16dc832804d728f0UL, 0xe9cc71ae64e3f09eUL, 0xbef634bc978bac31UL,
            0x7f64b1fa2a9129eUL, 0x71d831bd530ac7f3UL, 0xc7ad0a8a6d5be6f1UL, 0x82a7d3a815c7aaabUL,
            0x82b3fb6bUL},
            {0x2d777cddb912675dUL, 0x278d7b10722a13f9UL, 0xf5c02bfb7cc078afUL, 0x4283001239888836UL, 0xf44ca39a6f79db89UL, 0xed186122d71bcc9fUL, 0x8620017ab5f3ba3bUL,
            0x4283001239888836UL, 0xf44ca39a6f79db89UL, 0xed186122d71bcc9fUL, 0x8620017ab5f3ba3bUL,
            0xe787472187f176cUL, 0x267e64c4728cf181UL, 0xf1ba4b3007c15e30UL, 0x8e3a75d5b02ecfc0UL,
            0xe500e25fUL},
            {0xf2ec98824e8aa613UL, 0x5eb7e3fb53fe3bedUL, 0x12c22860466e1dd4UL, 0x374dd4288e0b72e5UL, 0xff8916db706c0df4UL, 0xcb1a9e85de5e4b8dUL, 0xd4d12afb67a27659UL,
            0x374dd4288e0b72e5UL, 0xff8916db706c0df4UL, 0xcb1a9e85de5e4b8dUL, 0xd4d12afb67a27659UL,
            0xfeb69095d1ba175aUL, 0xe2003aab23a47fadUL, 0x8163a3ecab894b49UL, 0x46d356674ce041f6UL,
            0xbd2bb07cUL},
            {0x5e763988e21f487fUL, 0x24189de8065d8dc5UL, 0xd1519d2403b62aa0UL, 0x9136456740119815UL, 0x4d8ff7733b27eb83UL, 0xea3040bc0c717ef8UL, 0x7617ab400dfadbcUL,
            0x9136456740119815UL, 0x4d8ff7733b27eb83UL, 0xea3040bc0c717ef8UL, 0x7617ab400dfadbcUL,
            0xfb336770c10b17a1UL, 0x6123b68b5b31f151UL, 0x1e147d5f295eccf2UL, 0x9ecbb1333556f977UL,
            0x3a2b431dUL},
            {0x48949dc327bb96adUL, 0xe1fd21636c5c50b4UL, 0x3f6eb7f13a8712b4UL, 0x14cf7f02dab0eee8UL, 0x6d01750605e89445UL, 0x4f1cf4006e613b78UL, 0x57c40c4db32bec3bUL,
            0x14cf7f02dab0eee8UL, 0x6d01750605e89445UL, 0x4f1cf4006e613b78UL, 0x57c40c4db32bec3bUL,
            0x1fde5a347f4a326eUL, 0xcb5a54308adb0e3fUL, 0x14994b2ba447a23cUL, 0x7067d0abb4257b68UL,
            0x7322a83dUL},
            {0xb7c4209fb24a85c5UL, 0xb35feb319c79ce10UL, 0xf0d3de191833b922UL, 0x570d62758ddf6397UL, 0x5e0204fb68a7b800UL, 0x4383a9236f8b5a2bUL, 0x7bc1a64641d803a4UL,
            0x570d62758ddf6397UL, 0x5e0204fb68a7b800UL, 0x4383a9236f8b5a2bUL, 0x7bc1a64641d803a4UL,
            0x5434d61285099f7aUL, 0xd49449aacdd5dd67UL, 0x97855ba0e9a7d75dUL, 0xda67328062f3a62fUL,
            0xa645ca1cUL},
            {0x9c9e5be0943d4b05UL, 0xb73dc69e45201cbbUL, 0xaab17180bfe5083dUL, 0xc738a77a9a55f0e2UL, 0x705221addedd81dfUL, 0xfd9bd8d397abcfa3UL, 0x8ccf0004aa86b795UL,
            0xc738a77a9a55f0e2UL, 0x705221addedd81dfUL, 0xfd9bd8d397abcfa3UL, 0x8ccf0004aa86b795UL,
            0x2bb5db2280068206UL, 0x8c22d29f307a01dUL, 0x274a22de02f473c8UL, 0xb8791870f4268182UL,
            0x8909a45aUL},
            {0x3898bca4dfd6638dUL, 0xf911ff35efef0167UL, 0x24bdf69e5091fc88UL, 0x9b82567ab6560796UL, 0x891b69462b41c224UL, 0x8eccc7e4f3af3b51UL, 0x381e54c3c8f1c7d0UL,
            0x9b82567ab6560796UL, 0x891b69462b41c224UL, 0x8eccc7e4f3af3b51UL, 0x381e54c3c8f1c7d0UL,
            0xc80fbc489a558a55UL, 0x1ba88e062a663af7UL, 0xaf7b1ef1c0116303UL, 0xbd20e1a5a6b1a0cdUL,
            0xbd30074cUL},
            {0x5b5d2557400e68e7UL, 0x98d610033574ceeUL, 0xdfd08772ce385debUL, 0x3c13e894365dc6c2UL, 0x26fc7bbcda3f0efUL, 0xdbb71106cdbfea36UL, 0x785239a742c6d26dUL,
            0x3c13e894365dc6c2UL, 0x26fc7bbcda3f0efUL, 0xdbb71106cdbfea36UL, 0x785239a742c6d26dUL,
            0xf810c415ae05b2f4UL, 0xbb9b9e7398526088UL, 0x70128f1bf830a32bUL, 0xbcc73f82b6410899UL,
            0xc17cf001UL},
            {0xa927ed8b2bf09bb6UL, 0x606e52f10ae94ecaUL, 0x71c2203feb35a9eeUL, 0x6e65ec14a8fb565UL, 0x34bff6f2ee5a7f79UL, 0x2e329a5be2c011bUL, 0x73161c93331b14f9UL,
            0x6e65ec14a8fb565UL, 0x34bff6f2ee5a7f79UL, 0x2e329a5be2c011bUL, 0x73161c93331b14f9UL,
            0x15d13f2408aecf88UL, 0x9f5b61b8a4b55b31UL, 0x8fe25a43b296dba6UL, 0xbdad03b7300f284eUL,
            0x26ffd25aUL},
            {0x8d25746414aedf28UL, 0x34b1629d28b33d3aUL, 0x4d5394aea5f82d7bUL, 0x379f76458a3c8957UL, 0x79dd080f9843af77UL, 0xc46f0a7847f60c1dUL, 0xaf1579c5797703ccUL,
            0x379f76458a3c8957UL, 0x79dd080f9843af77UL, 0xc46f0a7847f60c1dUL, 0xaf1579c5797703ccUL,
            0x8b7d31f338755c14UL, 0x2eff97679512aaa8UL, 0xdf07d68e075179edUL, 0xc8fa6c7a729e7f1fUL,
            0xf1d8ce3cUL},
            {0xb5bbdb73458712f2UL, 0x1ff887b3c2a35137UL, 0x7f7231f702d0ace9UL, 0x1e6f0910c3d25bd8UL, 0xad9e250862102467UL, 0x1c842a07abab30cdUL, 0xcd8124176bac01acUL,
            0x1e6f0910c3d25bd8UL, 0xad9e250862102467UL, 0x1c842a07abab30cdUL, 0xcd8124176bac01acUL,
            0xea6ebe7a79b67edcUL, 0x73f598ac9db26713UL, 0x4f4e72d7460b8fcUL, 0x365dc4b9fdf13f21UL,
            0x3ee8fb17UL},
            {0x3d32a26e3ab9d254UL, 0xfc4070574dc30d3aUL, 0xf02629579c2b27c9UL, 0xb1cf09b0184a4834UL, 0x5c03db48eb6cc159UL, 0xf18c7fcf34d1df47UL, 0xdfb043419ecf1fa9UL,
            0xb1cf09b0184a4834UL, 0x5c03db48eb6cc159UL, 0xf18c7fcf34d1df47UL, 0xdfb043419ecf1fa9UL,
            0xdcd78d13f9ca658fUL, 0x4355d408ffe8e49fUL, 0x81eefee908b593b4UL, 0x590c213c20e981a3UL,
            0xa77acc2aUL},
            {0x9371d3c35fa5e9a5UL, 0x42967cf4d01f30UL, 0x652d1eeae704145cUL, 0xceaf1a0d15234f15UL, 0x1450a54e45ba9b9UL, 0x65e9c1fd885aa932UL, 0x354d4bc034ba8cbeUL,
            0xceaf1a0d15234f15UL, 0x1450a54e45ba9b9UL, 0x65e9c1fd885aa932UL, 0x354d4bc034ba8cbeUL,
            0x8fd4ff484c08fb4bUL, 0xbf46749866f69ba0UL, 0xcf1c21ede82c9477UL, 0x4217548c43da109UL,
            0xf4556deeUL},
            {0xcbaa3cb8f64f54e0UL, 0x76c3b48ee5c08417UL, 0x9f7d24e87e61ce9UL, 0x85b8e53f22e19507UL, 0xbb57137739ca486bUL, 0xc77f131cca38f761UL, 0xc56ac3cf275be121UL,
            0x85b8e53f22e19507UL, 0xbb57137739ca486bUL, 0xc77f131cca38f761UL, 0xc56ac3cf275be121UL,
            0x9ec1a6c9109d2685UL, 0x3dad0922e76afdb0UL, 0xfd58cbf952958103UL, 0x7b04c908e78639a1UL,
            0xde287a64UL},
            {0xb2e23e8116c2ba9fUL, 0x7e4d9c0060101151UL, 0x3310da5e5028f367UL, 0xadc52dddb76f6e5eUL, 0x4aad4e925a962b68UL, 0x204b79b7f7168e64UL, 0xdf29ed6671c36952UL,
            0xadc52dddb76f6e5eUL, 0x4aad4e925a962b68UL, 0x204b79b7f7168e64UL, 0xdf29ed6671c36952UL,
            0xe02927cac396d210UL, 0x5d500e71742b638aUL, 0x5c9998af7f27b124UL, 0x3fba9a2573dc2f7UL,
            0x878e55b9UL},
            {0x8aa77f52d7868eb9UL, 0x4d55bd587584e6e2UL, 0xd2db37041f495f5UL, 0xce030d15b5fe2f4UL, 0x86b4a7a0780c2431UL, 0xee070a9ae5b51db7UL, 0xedc293d9595be5d8UL,
            0xce030d15b5fe2f4UL, 0x86b4a7a0780c2431UL, 0xee070a9ae5b51db7UL, 0xedc293d9595be5d8UL,
            0x3dfc5ec108260a2bUL, 0x8afe28c7123bf4e2UL, 0xda82ef38023a7a5fUL, 0x3e1f77b0174b77c3UL,
            0x7648486UL},
            {0x858fea922c7fe0c3UL, 0xcfe8326bf733bc6fUL, 0x4e5e2018cf8f7dfcUL, 0x64fd1bc011e5bab7UL, 0x5c9e858728015568UL, 0x97ac42c2b00b29b1UL, 0x7f89caf08c109aeeUL,
            0x64fd1bc011e5bab7UL, 0x5c9e858728015568UL, 0x97ac42c2b00b29b1UL, 0x7f89caf08c109aeeUL,
            0x9a8af34fd0e9dacfUL, 0xbbc54161aa1507e0UL, 0x7cda723ccbbfe5eeUL, 0x2c289d839fb93f58UL,
            0x57ac0fb1UL},
            {0x46ef25fdec8392b1UL, 0xe48d7b6d42a5cd35UL, 0x56a6fe1c175299caUL, 0xfdfa836b41dcef62UL, 0x2f8db8030e847e1bUL, 0x5ba0a49ac4f9b0f8UL, 0xdae897ed3e3fce44UL,
            0xfdfa836b41dcef62UL, 0x2f8db8030e847e1bUL, 0x5ba0a49ac4f9b0f8UL, 0xdae897ed3e3fce44UL,
            0x9c432e31aef626e7UL, 0x9a36e1c6cd6e3ddUL, 0x5095a167c34d19dUL, 0xa70005cfa6babbeaUL,
            0xd01967caUL},
            {0x8d078f726b2df464UL, 0xb50ee71cdcabb299UL, 0xf4af300106f9c7baUL, 0x7d222caae025158aUL, 0xcc028d5fd40241b9UL, 0xdd42515b639e6f97UL, 0xe08e86531a58f87fUL,
            0x7d222caae025158aUL, 0xcc028d5fd40241b9UL, 0xdd42515b639e6f97UL, 0xe08e86531a58f87fUL,
            0xd93612c835b37d7bUL, 0x91dd61729b2fa7f4UL, 0xba765a1bdda09db7UL, 0x55258b451b2b1297UL,
            0x96ecdf74UL},
            {0x35ea86e6960ca950UL, 0x34fe1fe234fc5c76UL, 0xa00207a3dc2a72b7UL, 0x80395e48739e1a67UL, 0x74a67d8f7f43c3d7UL, 0xdd2bdd1d62246c6eUL, 0xa1f44298ba80acf6UL,
            0x80395e48739e1a67UL, 0x74a67d8f7f43c3d7UL, 0xdd2bdd1d62246c6eUL, 0xa1f44298ba80acf6UL,
            0xad86d86c187bf38UL, 0x26feea1f2eee240dUL, 0xed7f1fd066b23897UL, 0xa768cf1e0fbb502UL,
            0x779f5506UL},
            {0x8aee9edbc15dd011UL, 0x51f5839dc8462695UL, 0xb2213e17c37dca2dUL, 0x133b299a939745c5UL, 0x796e2aac053f52b3UL, 0xe8d9fe1521a4a222UL, 0x819a8863e5d1c290UL,
            0x133b299a939745c5UL, 0x796e2aac053f52b3UL, 0xe8d9fe1521a4a222UL, 0x819a8863e5d1c290UL,
            0xc0737f0fe34d36adUL, 0xe6d6d4a267a5cc31UL, 0x98300a7911674c23UL, 0xbef189661c257098UL,
            0x3c94c2deUL},
            {0xc3e142ba98432ddaUL, 0x911d060cab126188UL, 0xb753fbfa8365b844UL, 0xfd1a9ba5e71b08a2UL, 0x7ac0dc2ed7778533UL, 0xb543161ff177188aUL, 0x492fc08a6186f3f4UL,
            0xfd1a9ba5e71b08a2UL, 0x7ac0dc2ed7778533UL, 0xb543161ff177188aUL, 0x492fc08a6186f3f4UL,
            0xfc4745f516afd3b6UL, 0x88c30370a53080eUL, 0x65a1bb34abc465e2UL, 0xabbd14662911c8b3UL,
            0x39f98fafUL},
            {0x123ba6b99c8cd8dbUL, 0x448e582672ee07c4UL, 0xcebe379292db9e65UL, 0x938f5bbab544d3d6UL, 0xd2a95f9f2d376d73UL, 0x68b2f16149e81aa3UL, 0xad7e32f82d86c79dUL,
            0x938f5bbab544d3d6UL, 0xd2a95f9f2d376d73UL, 0x68b2f16149e81aa3UL, 0xad7e32f82d86c79dUL,
            0x4574015ae8626ce2UL, 0x455aa6137386a582UL, 0x658ad2542e8ec20UL, 0xe31d7be2ca35d00UL,
            0x7af31199UL},
            {0xba87acef79d14f53UL, 0xb3e0fcae63a11558UL, 0xd5ac313a593a9f45UL, 0xeea5f5a9f74af591UL, 0x578710bcc36fbea2UL, 0x7a8393432188931dUL, 0x705cfc5ec7cc172UL,
            0xeea5f5a9f74af591UL, 0x578710bcc36fbea2UL, 0x7a8393432188931dUL, 0x705cfc5ec7cc172UL,
            0xda85ebe5fc427976UL, 0xbfa5c7a454df54c8UL, 0x4632b72a81bf66d2UL, 0x5dd72877db539ee2UL,
            0xe341a9d6UL},
            {0xbcd3957d5717dc3UL, 0x2da746741b03a007UL, 0x873816f4b1ece472UL, 0x2b826f1a2c08c289UL, 0xda50f56863b55e74UL, 0xb18712f6b3eed83bUL, 0xbdc7cc05ab4c685fUL,
            0x2b826f1a2c08c289UL, 0xda50f56863b55e74UL, 0xb18712f6b3eed83bUL, 0xbdc7cc05ab4c685fUL,
            0x9e45fb833d1b0afUL, 0xd7213081db29d82eUL, 0xd2a6b6c6a09ed55eUL, 0x98a7686cba323ca9UL,
            0xca24aeebUL},
            {0x61442ff55609168eUL, 0x6447c5fc76e8c9cfUL, 0x6a846de83ae15728UL, 0xeffc2663cffc777fUL, 0x93214f8f463afbedUL, 0xa156ef06066f4e4eUL, 0xa407b6ed8769d51eUL,
            0xeffc2663cffc777fUL, 0x93214f8f463afbedUL, 0xa156ef06066f4e4eUL, 0xa407b6ed8769d51eUL,
            0xbb2f9ed29745c02aUL, 0x981eecd435b36ad9UL, 0x461a5a05fb9cdff4UL, 0xbd6cb2a87b9f910cUL,
            0xb2252b57UL},
            {0xdbe4b1b2d174757fUL, 0x506512da18712656UL, 0x6857f3e0b8dd95fUL, 0x5a4fc2728a9bb671UL, 0xebb971522ec38759UL, 0x1a5a093e6cf1f72bUL, 0x729b057fe784f504UL,
            0x5a4fc2728a9bb671UL, 0xebb971522ec38759UL, 0x1a5a093e6cf1f72bUL, 0x729b057fe784f504UL,
            0x71fcbf42a767f9cfUL, 0x114cfe772da6cddUL, 0x60cdf9cb629d9d7aUL, 0xe270d10ad088b24eUL,
            0x72c81da1UL},
            {0x531e8e77b363161cUL, 0xeece0b43e2dae030UL, 0x8294b82c78f34ed1UL, 0xe777b1fd580582f2UL, 0x7b880f58da112699UL, 0x562c6b189a6333f4UL, 0x139d64f88a611d4UL,
            0xe777b1fd580582f2UL, 0x7b880f58da112699UL, 0x562c6b189a6333f4UL, 0x139d64f88a611d4UL,
            0x53d8ef17eda64fa4UL, 0xbf3eded14dc60a04UL, 0x2b5c559cf5ec07c5UL, 0x8895f7339d03a48aUL,
            0x6b9fce95UL},
            {0xf71e9c926d711e2bUL, 0xd77af2853a4ceaa1UL, 0x9aa0d6d76a36fae7UL, 0xdd16cd0fbc08393UL, 0x29a414a5d8c58962UL, 0x72793d8d1022b5b2UL, 0x2e8e69cf7cbffdf0UL,
            0xdd16cd0fbc08393UL, 0x29a414a5d8c58962UL, 0x72793d8d1022b5b2UL, 0x2e8e69cf7cbffdf0UL,
            0x3721c0473aa99c9aUL, 0x1cff4ed9c31cd91cUL, 0x4990735033cc482bUL, 0x7fdf8c701c72f577UL,
            0x19399857UL},
            {0xcb20ac28f52df368UL, 0xe6705ee7880996deUL, 0x9b665cc3ec6972f2UL, 0x4260e8c254e9924bUL, 0xf197a6eb4591572dUL, 0x8e867ff0fb7ab27cUL, 0xf95502fb503efaf3UL,
            0x4260e8c254e9924bUL, 0xf197a6eb4591572dUL, 0x8e867ff0fb7ab27cUL, 0xf95502fb503efaf3UL,
            0x30c41876b08e3e22UL, 0x958e2419e3cd22f4UL, 0xf0f3aa1fe119a107UL, 0x481662310a379100UL,
            0x3c57a994UL},
            {0xe4a794b4acb94b55UL, 0x89795358057b661bUL, 0x9c4cdcec176d7a70UL, 0x4890a83ee435bc8bUL, 0xd8c1c00fceb00914UL, 0x9e7111ba234f900fUL, 0xeb8dbab364d8b604UL,
            0x4890a83ee435bc8bUL, 0xd8c1c00fceb00914UL, 0x9e7111ba234f900fUL, 0xeb8dbab364d8b604UL,
            0xb3261452963eebbUL, 0x6cf94b02792c4f95UL, 0xd88fa815ef1e8fcUL, 0x2d687af66604c73UL,
            0xc053e729UL},
            {0xcb942e91443e7208UL, 0xe335de8125567c2aUL, 0xd4d74d268b86df1fUL, 0x8ba0fdd2ffc8b239UL, 0xf413b366c1ffe02fUL, 0xc05b2717c59a8a28UL, 0x981188eab4fcc8fbUL,
            0x8ba0fdd2ffc8b239UL, 0xf413b366c1ffe02fUL, 0xc05b2717c59a8a28UL, 0x981188eab4fcc8fbUL,
            0xe563f49a1d9072baUL, 0x3c6a3aa4a26367dcUL, 0xba0db13448653f34UL, 0x31065d756074d7d6UL,
            0x51cbbba7UL},
            {0xecca7563c203f7baUL, 0x177ae2423ef34bb2UL, 0xf60b7243400c5731UL, 0xcf1edbfe7330e94eUL, 0x881945906bcb3cc6UL, 0x4acf0293244855daUL, 0x65ae042c1c2a28c2UL,
            0xcf1edbfe7330e94eUL, 0x881945906bcb3cc6UL, 0x4acf0293244855daUL, 0x65ae042c1c2a28c2UL,
            0xb25fa0a1cab33559UL, 0xd98e8daa28124131UL, 0xfce17f50b9c351b3UL, 0x3f995ccf7386864bUL,
            0x1acde79aUL},
            {0x1652cb940177c8b5UL, 0x8c4fe7d85d2a6d6dUL, 0xf6216ad097e54e72UL, 0xf6521b912b368ae6UL, 0xa9fe4eff81d03e73UL, 0xd6f623629f80d1a3UL, 0x2b9604f32cb7dc34UL,
            0xf6521b912b368ae6UL, 0xa9fe4eff81d03e73UL, 0xd6f623629f80d1a3UL, 0x2b9604f32cb7dc34UL,
            0x2a43d84dcf59c7e2UL, 0xd0a197c70c5dae0bUL, 0x6e84d4bbc71d76a0UL, 0xc7e94620378c6cb2UL,
            0x2d160d13UL},
            {0x31fed0fc04c13ce8UL, 0x3d5d03dbf7ff240aUL, 0x727c5c9b51581203UL, 0x6b5ffc1f54fecb29UL, 0xa8e8e7ad5b9a21d9UL, 0xc4d5a32cd6aac22dUL, 0xd7e274ad22d4a79aUL,
            0x6b5ffc1f54fecb29UL, 0xa8e8e7ad5b9a21d9UL, 0xc4d5a32cd6aac22dUL, 0xd7e274ad22d4a79aUL,
            0x368841ea5731a112UL, 0xfeaf7bc2e73ca48fUL, 0x636fb272e9ea1f6UL, 0x5d9cb7580c3f6207UL,
            0x787f5801UL},
            {0xe7b668947590b9b3UL, 0xbaa41ad32938d3faUL, 0xabcbc8d4ca4b39e4UL, 0x381ee1b7ea534f4eUL, 0xda3759828e3de429UL, 0x3e015d76729f9955UL, 0xcbbec51a6485fbdeUL,
            0x381ee1b7ea534f4eUL, 0xda3759828e3de429UL, 0x3e015d76729f9955UL, 0xcbbec51a6485fbdeUL,
            0x9b86605281f20727UL, 0xfc6fcf508676982aUL, 0x3b135f7a813a1040UL, 0xd3a4706bea1db9c9UL,
            0xc9629828UL},
            {0x1de2119923e8ef3cUL, 0x6ab27c096cf2fe14UL, 0x8c3658edca958891UL, 0x4cc8ed3ada5f0f2UL, 0x4a496b77c1f1c04eUL, 0x9085b0a862084201UL, 0xa1894bde9e3dee21UL,
            0x4cc8ed3ada5f0f2UL, 0x4a496b77c1f1c04eUL, 0x9085b0a862084201UL, 0xa1894bde9e3dee21UL,
            0x367fb472dc5b277dUL, 0x7d39ccca16fc6745UL, 0x763f988d70db9106UL, 0xa8b66f7fecb70f02UL,
            0xbe139231UL},
            {0x1269df1e69e14fa7UL, 0x992f9d58ac5041b7UL, 0xe97fcf695a7cbbb4UL, 0xe5d0549802d15008UL, 0x424c134ecd0db834UL, 0x6fc44fd91be15c6cUL, 0xa1a5ef95d50e537dUL,
            0xe5d0549802d15008UL, 0x424c134ecd0db834UL, 0x6fc44fd91be15c6cUL, 0xa1a5ef95d50e537dUL,
            0xd1e3daf5d05f5308UL, 0x4c7f81600eaa1327UL, 0x109d1b8d1f9d0d2bUL, 0x871e8699e0aeb862UL,
            0x7df699efUL},
            {0x820826d7aba567ffUL, 0x1f73d28e036a52f3UL, 0x41c4c5a73f3b0893UL, 0xaa0d74d4a98db89bUL, 0x36fd486d07c56e1dUL, 0xd0ad23cbb6660d8aUL, 0x1264a84665b35e19UL,
            0xaa0d74d4a98db89bUL, 0x36fd486d07c56e1dUL, 0xd0ad23cbb6660d8aUL, 0x1264a84665b35e19UL,
            0x789682bf7d781b33UL, 0x6bfa6abd2fb5722dUL, 0x6779cb3623d33900UL, 0x435ca5214e1ee5f0UL,
            0x8ce6b96dUL},
            {0xffe0547e4923cef9UL, 0x3534ed49b9da5b02UL, 0x548a273700fba03dUL, 0x28ac84ca70958f7eUL, 0xd8ae575a68faa731UL, 0x2aaaee9b9dcffd4cUL, 0x6c7faab5c285c6daUL,
            0x28ac84ca70958f7eUL, 0xd8ae575a68faa731UL, 0x2aaaee9b9dcffd4cUL, 0x6c7faab5c285c6daUL,
            0x45d94235f99ba78fUL, 0xab5ea16f39497f5bUL, 0xfb4d6c86fccbdca3UL, 0x8104e6310a5fd2c7UL,
            0x6f9ed99cUL},
            {0x72da8d1b11d8bc8bUL, 0xba94b56b91b681c6UL, 0x4e8cc51bd9b0fc8cUL, 0x43505ed133be672aUL, 0xe8f2f9d973c2774eUL, 0x677b9b9c7cad6d97UL, 0x4e1f5d56ef17b906UL,
            0x43505ed133be672aUL, 0xe8f2f9d973c2774eUL, 0x677b9b9c7cad6d97UL, 0x4e1f5d56ef17b906UL,
            0xeea3a6038f983767UL, 0x87109f077f86db01UL, 0xecc1ca41f74d61ccUL, 0x34a87e86e83bed17UL,
            0xe0244796UL},
            {0xd62ab4e3f88fc797UL, 0xea86c7aeb6283ae4UL, 0xb5b93e09a7fe465UL, 0x4344a1a0134afe2UL, 0xff5c17f02b62341dUL, 0x3214c6a587ce4644UL, 0xa905e7ed0629d05cUL,
            0x4344a1a0134afe2UL, 0xff5c17f02b62341dUL, 0x3214c6a587ce4644UL, 0xa905e7ed0629d05cUL,
            0xb5c72690cd716e82UL, 0x7c6097649e6ebe7bUL, 0x7ceee8c6e56a4dcdUL, 0x80ca849dc53eb9e4UL,
            0x4ccf7e75UL},
            {0xd0f06c28c7b36823UL, 0x1008cb0874de4bb8UL, 0xd6c7ff816c7a737bUL, 0x489b697fe30aa65fUL, 0x4da0fb621fdc7817UL, 0xdc43583b82c58107UL, 0x4b0261debdec3cd6UL,
            0x489b697fe30aa65fUL, 0x4da0fb621fdc7817UL, 0xdc43583b82c58107UL, 0x4b0261debdec3cd6UL,
            0xa9748d7b6c0e016cUL, 0x7e8828f7ba4b034bUL, 0xda0fa54348a2512aUL, 0xebf9745c0962f9adUL,
            0x915cef86UL},
            {0x99b7042460d72ec6UL, 0x2a53e5e2b8e795c2UL, 0x53a78132d9e1b3e3UL, 0xc043e67e6fc64118UL, 0xff0abfe926d844d3UL, 0xf2a9fe5db2e910feUL, 0xce352cdc84a964ddUL,
            0xc043e67e6fc64118UL, 0xff0abfe926d844d3UL, 0xf2a9fe5db2e910feUL, 0xce352cdc84a964ddUL,
            0xb89bc028aa5e6063UL, 0xa354e7fdac04459cUL, 0x68d6547e6e980189UL, 0xc968dddfd573773eUL,
            0x5cb59482UL},
            {0x4f4dfcfc0ec2bae5UL, 0x841233148268a1b8UL, 0x9248a76ab8be0d3UL, 0x334c5a25b5903a8cUL, 0x4c94fef443122128UL, 0x743e7d8454655c40UL, 0x1ab1e6d1452ae2cdUL,
            0x334c5a25b5903a8cUL, 0x4c94fef443122128UL, 0x743e7d8454655c40UL, 0x1ab1e6d1452ae2cdUL,
            0xfec766de4a8e476cUL, 0xcc0929da9567e71bUL, 0x5f9ef5b5f150c35aUL, 0x87659cabd649768fUL,
            0x6ca3f532UL},
            {0xfe86bf9d4422b9aeUL, 0xebce89c90641ef9cUL, 0x1c84e2292c0b5659UL, 0x8bde625a10a8c50dUL, 0xeb8271ded1f79a0bUL, 0x14dc6844f0de7a3cUL, 0xf85b2f9541e7e6daUL,
            0x8bde625a10a8c50dUL, 0xeb8271ded1f79a0bUL, 0x14dc6844f0de7a3cUL, 0xf85b2f9541e7e6daUL,
            0x2fe22cfd1683b961UL, 0xea1d75c5b7aa01caUL, 0x9eef60a44876bb95UL, 0x950c818e505c6f7fUL,
            0xe24f3859UL},
            {0xa90d81060932dbb0UL, 0x8acfaa88c5fbe92bUL, 0x7c6f3447e90f7f3fUL, 0xdd52fc14c8dd3143UL, 0x1bc7508516e40628UL, 0x3059730266ade626UL, 0xffa526822f391c2UL,
            0xdd52fc14c8dd3143UL, 0x1bc7508516e40628UL, 0x3059730266ade626UL, 0xffa526822f391c2UL,
            0xe25232d7afc8a406UL, 0xd2b8a5a3f3b5f670UL, 0x6630f33edb7dfe32UL, 0xc71250ba68c4ea86UL,
            0xadf5a9c7UL},
            {0x17938a1b0e7f5952UL, 0x22cadd2f56f8a4beUL, 0x84b0d1183d5ed7c1UL, 0xc1336b92fef91bf6UL, 0x80332a3945f33fa9UL, 0xa0f68b86f726ff92UL, 0xa3db5282cf5f4c0bUL,
            0xc1336b92fef91bf6UL, 0x80332a3945f33fa9UL, 0xa0f68b86f726ff92UL, 0xa3db5282cf5f4c0bUL,
            0x82640b6fc4916607UL, 0x2dc2a3aa1a894175UL, 0x8b4c852bdee7cc9UL, 0x10b9d0a08b55ff83UL,
            0x32264b75UL},
            {0xde9e0cb0e16f6e6dUL, 0x238e6283aa4f6594UL, 0x4fb9c914c2f0a13bUL, 0x497cb912b670f3bUL, 0xd963a3f02ff4a5b6UL, 0x4fccefae11b50391UL, 0x42ba47db3f7672fUL,
            0x497cb912b670f3bUL, 0xd963a3f02ff4a5b6UL, 0x4fccefae11b50391UL, 0x42ba47db3f7672fUL,
            0x1d6b655a1889feefUL, 0x5f319abf8fafa19fUL, 0x715c2e49deb14620UL, 0x8d9153082ecdcea4UL,
            0xa64b3376UL},
            {0x6d4b876d9b146d1aUL, 0xaab2d64ce8f26739UL, 0xd315f93600e83fe5UL, 0x2fe9fabdbe7fdd4UL, 0x755db249a2d81a69UL, 0xf27929f360446d71UL, 0x79a1bf957c0c1b92UL,
            0x2fe9fabdbe7fdd4UL, 0x755db249a2d81a69UL, 0xf27929f360446d71UL, 0x79a1bf957c0c1b92UL,
            0x3c8a28d4c936c9cdUL, 0xdf0d3d13b2c6a902UL, 0xc76702dd97cd2eddUL, 0x1aa220f7be16517UL,
            0xd33890eUL},
            {0xe698fa3f54e6ea22UL, 0xbd28e20e7455358cUL, 0x9ace161f6ea76e66UL, 0xd53fb7e3c93a9e4UL, 0x737ae71b051bf108UL, 0x7ac71feb84c2df42UL, 0x3d8075cd293a15b4UL,
            0xd53fb7e3c93a9e4UL, 0x737ae71b051bf108UL, 0x7ac71feb84c2df42UL, 0x3d8075cd293a15b4UL,
            0xbf8cee5e095d8a7cUL, 0xe7086b3c7608143aUL, 0xe55b0c2fa938d70cUL, 0xfffb5f58e643649cUL,
            0x926d4b63UL},
            {0x7bc0deed4fb349f7UL, 0x1771aff25dc722faUL, 0x19ff0644d9681917UL, 0xcf7d7f25bd70cd2cUL, 0x9464ed9baeb41b4fUL, 0xb9064f5c3cb11b71UL, 0x237e39229b012b20UL,
            0xcf7d7f25bd70cd2cUL, 0x9464ed9baeb41b4fUL, 0xb9064f5c3cb11b71UL, 0x237e39229b012b20UL,
            0xdd54d3f5d982dffeUL, 0x7fc7562dbfc81dbfUL, 0x5b0dd1924f70945UL, 0xf1760537d8261135UL,
            0xd51ba539UL},
            {0xdb4b15e88533f622UL, 0x256d6d2419b41ce9UL, 0x9d7c5378396765d5UL, 0x9040e5b936b8661bUL, 0x276e08fa53ac27fdUL, 0x8c944d39c2bdd2ccUL, 0xe2514c9802a5743cUL,
            0x9040e5b936b8661bUL, 0x276e08fa53ac27fdUL, 0x8c944d39c2bdd2ccUL, 0xe2514c9802a5743cUL,
            0xe82107b11ac90386UL, 0x7d6a22bc35055e6UL, 0xfd6ea9d1c438d8aeUL, 0xbe6015149e981553UL,
            0x7f37636dUL},
            {0x922834735e86ecb2UL, 0x363382685b88328eUL, 0xe9c92960d7144630UL, 0x8431b1bfd0a2379cUL, 0x90383913aea283f9UL, 0xa6163831eb4924d2UL, 0x5f3921b4f9084aeeUL,
            0x8431b1bfd0a2379cUL, 0x90383913aea283f9UL, 0xa6163831eb4924d2UL, 0x5f3921b4f9084aeeUL,
            0x7a70061a1473e579UL, 0x5b19d80dcd2c6331UL, 0x6196b97931faad27UL, 0x869bf6828e237c3fUL,
            0xb98026c0UL},
            {0x30f1d72c812f1eb8UL, 0xb567cd4a69cd8989UL, 0x820b6c992a51f0bcUL, 0xc54677a80367125eUL, 0x3204fbdba462e606UL, 0x8563278afc9eae69UL, 0x262147dd4bf7e566UL,
            0xc54677a80367125eUL, 0x3204fbdba462e606UL, 0x8563278afc9eae69UL, 0x262147dd4bf7e566UL,
            0x2178b63e7ee2d230UL, 0xe9c61ad81f5bff26UL, 0x9af7a81b3c501ecaUL, 0x44104a3859f0238fUL,
            0xb877767eUL},
            {0x168884267f3817e9UL, 0x5b376e050f637645UL, 0x1c18314abd34497aUL, 0x9598f6ab0683fcc2UL, 0x1c805abf7b80e1eeUL, 0xdec9ac42ee0d0f32UL, 0x8cd72e3912d24663UL,
            0x9598f6ab0683fcc2UL, 0x1c805abf7b80e1eeUL, 0xdec9ac42ee0d0f32UL, 0x8cd72e3912d24663UL,
            0x1f025d405f1c1d87UL, 0xbf7b6221e1668f8fUL, 0x52316f64e692dbb0UL, 0x7bf43df61ec51b39UL,
            0xaefae77UL},
            {0x82e78596ee3e56a7UL, 0x25697d9c87f30d98UL, 0x7600a8342834924dUL, 0x6ba372f4b7ab268bUL, 0x8c3237cf1fe243dfUL, 0x3833fc51012903dfUL, 0x8e31310108c5683fUL,
            0x6ba372f4b7ab268bUL, 0x8c3237cf1fe243dfUL, 0x3833fc51012903dfUL, 0x8e31310108c5683fUL,
            0x126593715c2de429UL, 0x48ca8f35a3f54b90UL, 0xb9322b632f4f8b0UL, 0x926bb169b7337693UL,
            0xf686911UL},
            {0xaa2d6cf22e3cc252UL, 0x9b4dec4f5e179f16UL, 0x76fb0fba1d99a99aUL, 0x9a62af3dbba140daUL, 0x27857ea044e9dfc1UL, 0x33abce9da2272647UL, 0xb22a7993aaf32556UL,
            0x9a62af3dbba140daUL, 0x27857ea044e9dfc1UL, 0x33abce9da2272647UL, 0xb22a7993aaf32556UL,
            0xbf8f88f8019bedf0UL, 0xed2d7f01fb273905UL, 0x6b45f15901b481cdUL, 0xf88ebb413ba6a8d5UL,
            0x3deadf12UL},
            {0x7bf5ffd7f69385c7UL, 0xfc077b1d8bc82879UL, 0x9c04e36f9ed83a24UL, 0x82065c62e6582188UL, 0x8ef787fd356f5e43UL, 0x2922e53e36e17dfaUL, 0x9805f223d385010bUL,
            0x82065c62e6582188UL, 0x8ef787fd356f5e43UL, 0x2922e53e36e17dfaUL, 0x9805f223d385010bUL,
            0x692154f3491b787dUL, 0xe7e64700e414fbfUL, 0x757d4d4ab65069a0UL, 0xcd029446a8e348e2UL,
            0xccf02a4eUL},
            {0xe89c8ff9f9c6e34bUL, 0xf54c0f669a49f6c4UL, 0xfc3e46f5d846adefUL, 0x22f2aa3df2221ccUL, 0xf66fea90f5d62174UL, 0xb75defaeaa1dd2a7UL, 0x9b994cd9a7214fd5UL,
            0x22f2aa3df2221ccUL, 0xf66fea90f5d62174UL, 0xb75defaeaa1dd2a7UL, 0x9b994cd9a7214fd5UL,
            0xfac675a31804b773UL, 0x98bcb3b820c50fc6UL, 0xe14af64d28cf0885UL, 0x27466fbd2b360eb5UL,
            0x176c1722UL},
            {0xa18fbcdccd11e1f4UL, 0x8248216751dfd65eUL, 0x40c089f208d89d7cUL, 0x229b79ab69ae97dUL, 0xa87aabc2ec26e582UL, 0xbe2b053721eb26d2UL, 0x10febd7f0c3d6fcbUL,
            0x229b79ab69ae97dUL, 0xa87aabc2ec26e582UL, 0xbe2b053721eb26d2UL, 0x10febd7f0c3d6fcbUL,
            0x9cc5b9b2f6e3bf7bUL, 0x655d8495fe624a86UL, 0x6381a9f3d1f2bd7eUL, 0x79ebabbfc25c83e2UL,
            0x26f82adUL},
            {0x2d54f40cc4088b17UL, 0x59d15633b0cd1399UL, 0xa8cc04bb1bffd15bUL, 0xd332cdb073d8dc46UL, 0x272c56466868cb46UL, 0x7e7fcbe35ca6c3f3UL, 0xee8f51e5a70399d4UL,
            0xd332cdb073d8dc46UL, 0x272c56466868cb46UL, 0x7e7fcbe35ca6c3f3UL, 0xee8f51e5a70399d4UL,
            0x16737a9c7581fe7bUL, 0xed04bf52f4b75dcbUL, 0x9707ffb36bd30c1aUL, 0x1390f236fdc0de3eUL,
            0xb5244f42UL},
            {0x69276946cb4e87c7UL, 0x62bdbe6183be6fa9UL, 0x3ba9773dac442a1aUL, 0x702e2afc7f5a1825UL, 0x8c49b11ea8151fdcUL, 0xcaf3fef61f5a86faUL, 0xef0b2ee8649d7272UL,
            0x702e2afc7f5a1825UL, 0x8c49b11ea8151fdcUL, 0xcaf3fef61f5a86faUL, 0xef0b2ee8649d7272UL,
            0x9e34a4e08d9441e1UL, 0x7bdc0cd64d5af533UL, 0xa926b14d99e3d868UL, 0xfca923a17788cce4UL,
            0x49a689e5UL},
            {0x668174a3f443df1dUL, 0x407299392da1ce86UL, 0xc2a3f7d7f2c5be28UL, 0xa590b202a7a5807bUL, 0x968d2593f7ccb54eUL, 0x9dd8d669e3e95decUL, 0xee0cc5dd58b6e93aUL,
            0xa590b202a7a5807bUL, 0x968d2593f7ccb54eUL, 0x9dd8d669e3e95decUL, 0xee0cc5dd58b6e93aUL,
            0xac65d5a9466fb483UL, 0x221be538b2c9d806UL, 0x5cbe9441784f9fd9UL, 0xd4c7d5d6e3c122b8UL,
            0x59fcdd3UL},
            {0x5e29be847bd5046UL, 0xb561c7f19c8f80c3UL, 0x5e5abd5021ccaeafUL, 0x7432d63888e0c306UL, 0x74bbceeed479cb71UL, 0x6471586599575fdfUL, 0x6a859ad23365cba2UL,
            0x7432d63888e0c306UL, 0x74bbceeed479cb71UL, 0x6471586599575fdfUL, 0x6a859ad23365cba2UL,
            0xf9ceec84acd18dccUL, 0x74a242ff1907437cUL, 0xf70890194e1ee913UL, 0x777dfcb4bb01f0baUL,
            0x4f4b04e9UL},
            {0xcd0d79f2164da014UL, 0x4c386bb5c5d6ca0cUL, 0x8e771b03647c3b63UL, 0x69db23875cb0b715UL, 0xada8dd91504ae37fUL, 0x46bf18dbf045ed6aUL, 0xe1b5f67b0645ab63UL,
            0x69db23875cb0b715UL, 0xada8dd91504ae37fUL, 0x46bf18dbf045ed6aUL, 0xe1b5f67b0645ab63UL,
            0x877be8f5dcddff4UL, 0x6d471b5f9ca2e2d1UL, 0x802c86d6f495b9bbUL, 0xa1f9b9b22b3be704UL,
            0x8b00f891UL},
            {0xe0e6fc0b1628af1dUL, 0x29be5fb4c27a2949UL, 0x1c3f781a604d3630UL, 0xc4af7faf883033aaUL, 0x9bd296c4e9453cacUL, 0xca45426c1f7e33f9UL, 0xa6bbdcf7074d40c5UL,
            0xc4af7faf883033aaUL, 0x9bd296c4e9453cacUL, 0xca45426c1f7e33f9UL, 0xa6bbdcf7074d40c5UL,
            0xe13a005d7142733bUL, 0xc02b7925c5eeefafUL, 0xd39119a60441e2d5UL, 0x3c24c710df8f4d43UL,
            0x16e114f3UL},
            {0x2058927664adfd93UL, 0x6e8f968c7963baa5UL, 0xaf3dced6fff7c394UL, 0x42e34cf3d53c7876UL, 0x9cddbb26424dc5eUL, 0x64f6340a6d8eddadUL, 0x2196e488eb2a3a4bUL,
            0x42e34cf3d53c7876UL, 0x9cddbb26424dc5eUL, 0x64f6340a6d8eddadUL, 0x2196e488eb2a3a4bUL,
            0xc9e9da25911a16fdUL, 0xe21b4683f3e196a8UL, 0xcb80bf1a4c6fdbb4UL, 0x53792e9b3c3e67f8UL,
            0xd6b6dadcUL},
            {0xdc107285fd8e1af7UL, 0xa8641a0609321f3fUL, 0xdb06e89ffdc54466UL, 0xbcc7a81ed5432429UL, 0xb6d7bdc6ad2e81f1UL, 0x93605ec471aa37dbUL, 0xa2a73f8a85a8e397UL,
            0xbcc7a81ed5432429UL, 0xb6d7bdc6ad2e81f1UL, 0x93605ec471aa37dbUL, 0xa2a73f8a85a8e397UL,
            0x10a012b8ca7ac24bUL, 0xaac5fd63351595cfUL, 0x5bb4c648a226dea0UL, 0x9d11ecb2b5c05c5fUL,
            0x897e20acUL},
            {0xfbba1afe2e3280f1UL, 0x755a5f392f07fceUL, 0x9e44a9a15402809aUL, 0x6226a32e25099848UL, 0xea895661ecf53004UL, 0x4d7e0158db2228b9UL, 0xe5a7d82922f69842UL,
            0x6226a32e25099848UL, 0xea895661ecf53004UL, 0x4d7e0158db2228b9UL, 0xe5a7d82922f69842UL,
            0x2cea7713b69840caUL, 0x18de7b9ae938375bUL, 0xf127cca08f3cc665UL, 0xb1c22d727665ad2UL,
            0xf996e05dUL},
            {0xbfa10785ddc1011bUL, 0xb6e1c4d2f670f7deUL, 0x517d95604e4fcc1fUL, 0xca6552a0dfb82c73UL, 0xb024cdf09e34ba07UL, 0x66cd8c5a95d7393bUL, 0xe3939acf790d4a74UL,
            0xca6552a0dfb82c73UL, 0xb024cdf09e34ba07UL, 0x66cd8c5a95d7393bUL, 0xe3939acf790d4a74UL,
            0x97827541a1ef051eUL, 0xac2fce47ebe6500cUL, 0xb3f06d3bddf3bd6aUL, 0x1d74afb25e1ce5feUL,
            0xc4306af6UL},
            {0x534cc35f0ee1eb4eUL, 0xb703820f1f3b3dceUL, 0x884aa164cf22363UL, 0xf14ef7f47d8a57a3UL, 0x80d1f86f2e061d7cUL, 0x401d6c2f151b5a62UL, 0xe988460224108944UL,
            0xf14ef7f47d8a57a3UL, 0x80d1f86f2e061d7cUL, 0x401d6c2f151b5a62UL, 0xe988460224108944UL,
            0x7804d4135f68cd19UL, 0x5487b4b39e69fe8eUL, 0x8cc5999015358a27UL, 0x8f3729b61c2d5601UL,
            0x6dcad433UL},
            {0x7ca6e3933995dacUL, 0xfd118c77daa8188UL, 0x3aceb7b5e7da6545UL, 0xc8389799445480dbUL, 0x5389f5df8aacd50dUL, 0xd136581f22fab5fUL, 0xc2f31f85991da417UL,
            0xc8389799445480dbUL, 0x5389f5df8aacd50dUL, 0xd136581f22fab5fUL, 0xc2f31f85991da417UL,
            0xaefbf9ff84035a43UL, 0x8accbaf44adadd7cUL, 0xe57f3657344b67f5UL, 0x21490e5e8abdec51UL,
            0x3c07374dUL},
            {0xf0d6044f6efd7598UL, 0xe044d6ba4369856eUL, 0x91968e4f8c8a1a4cUL, 0x70bd1968996bffc2UL, 0x4c613de5d8ab32acUL, 0xfe1f4f97206f79d8UL, 0xac0434f2c4e213a9UL,
            0x70bd1968996bffc2UL, 0x4c613de5d8ab32acUL, 0xfe1f4f97206f79d8UL, 0xac0434f2c4e213a9UL,
            0x7490e9d82cfe22caUL, 0x5fbbf7f987454238UL, 0xc39e0dc8368ce949UL, 0x22201d3894676c71UL,
            0xf0f4602cUL},
            {0x3d69e52049879d61UL, 0x76610636ea9f74feUL, 0xe9bf5602f89310c0UL, 0x8eeb177a86053c11UL, 0xe390122c345f34a2UL, 0x1e30e47afbaaf8d6UL, 0x7b892f68e5f91732UL,
            0x8eeb177a86053c11UL, 0xe390122c345f34a2UL, 0x1e30e47afbaaf8d6UL, 0x7b892f68e5f91732UL,
            0xb87922525fa44158UL, 0xf440a1ee1a1a766bUL, 0xee8efad279d08c5cUL, 0x421f910c5b60216eUL,
            0x3e1ea071UL},
            {0x79da242a16acae31UL, 0x183c5f438e29d40UL, 0x6d351710ae92f3deUL, 0x27233b28b5b11e9bUL, 0xc7dfe8988a942700UL, 0x570ed11c4abad984UL, 0x4b4c04632f48311aUL,
            0x27233b28b5b11e9bUL, 0xc7dfe8988a942700UL, 0x570ed11c4abad984UL, 0x4b4c04632f48311aUL,
            0x12f33235442cbf9UL, 0xa35315ca0b5b8cdbUL, 0xd8abde62ead5506bUL, 0xfc0fcf8478ad5266UL,
            0x67580f0cUL},
            {0x461c82656a74fb57UL, 0xd84b491b275aa0f7UL, 0x8f262cb29a6eb8b2UL, 0x49fa3070bc7b06d0UL, 0xf12ed446bd0c0539UL, 0x6d43ac5d1dd4b240UL, 0x7609524fe90bec93UL,
            0x49fa3070bc7b06d0UL, 0xf12ed446bd0c0539UL, 0x6d43ac5d1dd4b240UL, 0x7609524fe90bec93UL,
            0x391c2b2e076ec241UL, 0xf5e62deda7839f7bUL, 0x3c7b3186a10d870fUL, 0x77ef4f2cba4f1005UL,
            0x4e109454UL},
            {0x53c1a66d0b13003UL, 0x731f060e6fe797fcUL, 0xdaa56811791371e3UL, 0x57466046cf6896edUL, 0x8ac37e0e8b25b0c6UL, 0x3e6074b52ad3cf18UL, 0xaa491ce7b45db297UL,
            0x57466046cf6896edUL, 0x8ac37e0e8b25b0c6UL, 0x3e6074b52ad3cf18UL, 0xaa491ce7b45db297UL,
            0xf7a9227c5e5e22c3UL, 0x3d92e0841e29ce28UL, 0x2d30da5b2859e59dUL, 0xff37fa1c9cbfafc2UL,
            0x88a474a7UL},
            {0xd3a2efec0f047e9UL, 0x1cabce58853e58eaUL, 0x7a17b2eae3256be4UL, 0xc2dcc9758c910171UL, 0xcb5cddaeff4ddb40UL, 0x5d7cc5869baefef1UL, 0x9644c5853af9cfebUL,
            0xc2dcc9758c910171UL, 0xcb5cddaeff4ddb40UL, 0x5d7cc5869baefef1UL, 0x9644c5853af9cfebUL,
            0x255c968184694ee1UL, 0x4e4d726eda360927UL, 0x7d27dd5b6d100377UL, 0x9a300e2020ddea2cUL,
            0x5b5beddUL},
            {0x43c64d7484f7f9b2UL, 0x5da002b64aafaeb7UL, 0xb576c1e45800a716UL, 0x3ee84d3d5b4ca00bUL, 0x5cbc6d701894c3f9UL, 0xd9e946f5ae1ca95UL, 0x24ca06e67f0b1833UL,
            0x3ee84d3d5b4ca00bUL, 0x5cbc6d701894c3f9UL, 0xd9e946f5ae1ca95UL, 0x24ca06e67f0b1833UL,
            0x3413d46b4152650eUL, 0xcbdfdbc2ab516f9cUL, 0x2aad8acb739e0c6cUL, 0x2bfc950d9f9fa977UL,
            0x1aaddfa7UL},
            {0xa7dec6ad81cf7fa1UL, 0x180c1ab708683063UL, 0x95e0fd7008d67cffUL, 0x6b11c5073687208UL, 0x7e0a57de0d453f3UL, 0xe48c267d4f646867UL, 0x2168e9136375f9cbUL,
            0x6b11c5073687208UL, 0x7e0a57de0d453f3UL, 0xe48c267d4f646867UL, 0x2168e9136375f9cbUL,
            0x64da194aeeea7fdfUL, 0xa3b9f01fa5885678UL, 0xc316f8ee2eb2bd17UL, 0xa7e4d80f83e4427fUL,
            0x5be07fd8UL},
            {0x5408a1df99d4affUL, 0xb9565e588740f6bdUL, 0xabf241813b08006eUL, 0x7da9e81d89fda7adUL, 0x274157cabe71440dUL, 0x2c22d9a480b331f7UL, 0xe835c8ac746472d5UL,
            0x7da9e81d89fda7adUL, 0x274157cabe71440dUL, 0x2c22d9a480b331f7UL, 0xe835c8ac746472d5UL,
            0x2038ce817a201ae4UL, 0x46f3289dfe1c5e40UL, 0x435578a42d4b7c56UL, 0xf96d9f409fcf561UL,
            0xcbca8606UL},
            {0xa8b27a6bcaeeed4bUL, 0xaec1eeded6a87e39UL, 0x9daf246d6fed8326UL, 0xd45a938b79f54e8fUL, 0x366b219d6d133e48UL, 0x5b14be3c25c49405UL, 0xfdd791d48811a572UL,
            0xd45a938b79f54e8fUL, 0x366b219d6d133e48UL, 0x5b14be3c25c49405UL, 0xfdd791d48811a572UL,
            0x3de67b8d9e95d335UL, 0x903c01307cfbeed5UL, 0xaf7d65f32274f1d1UL, 0x4dba141b5fc03c42UL,
            0xbde64d01UL},
            {0x9a952a8246fdc269UL, 0xd0dcfcac74ef278cUL, 0x250f7139836f0f1fUL, 0xc83d3c5f4e5f0320UL, 0x694e7adeb2bf32e5UL, 0x7ad09538a3da27f5UL, 0x2b5c18f934aa5303UL,
            0xc83d3c5f4e5f0320UL, 0x694e7adeb2bf32e5UL, 0x7ad09538a3da27f5UL, 0x2b5c18f934aa5303UL,
            0xc4dad7703d34326eUL, 0x825569e2bcdc6a25UL, 0xb83d267709ca900dUL, 0x44ed05151f5d74e6UL,
            0xee90cf33UL},
            {0xc930841d1d88684fUL, 0x5eb66eb18b7f9672UL, 0xe455d413008a2546UL, 0xbc271bc0df14d647UL, 0xb071100a9ff2edbbUL, 0x2b1a4c1cc31a119aUL, 0xb5d7caa1bd946cefUL,
            0xbc271bc0df14d647UL, 0xb071100a9ff2edbbUL, 0x2b1a4c1cc31a119aUL, 0xb5d7caa1bd946cefUL,
            0xe02623ae10f4aaddUL, 0xd79f600389cd06fdUL, 0x1e8da7965303e62bUL, 0x86f50e10eeab0925UL,
            0x4305c3ceUL},
            {0x94dc6971e3cf071aUL, 0x994c7003b73b2b34UL, 0xea16e85978694e5UL, 0x336c1b59a1fc19f6UL, 0xc173acaecc471305UL, 0xdb1267d24f3f3f36UL, 0xe9a5ee98627a6e78UL,
            0x336c1b59a1fc19f6UL, 0xc173acaecc471305UL, 0xdb1267d24f3f3f36UL, 0xe9a5ee98627a6e78UL,
            0x718f334204305ae5UL, 0xe3b53c148f98d22cUL, 0xa184012df848926UL, 0x6e96386127d51183UL,
            0x4b3a1d76UL},
            {0x7fc98006e25cac9UL, 0x77fee0484cda86a7UL, 0x376ec3d447060456UL, 0x84064a6dcf916340UL, 0xfbf55a26790e0ebbUL, 0x2e7f84151c31a5c2UL, 0x9f7f6d76b950f9bfUL,
            0x84064a6dcf916340UL, 0xfbf55a26790e0ebbUL, 0x2e7f84151c31a5c2UL, 0x9f7f6d76b950f9bfUL,
            0x125e094fbee2b146UL, 0x5706aa72b2eef7c2UL, 0x1c4a2daa905ee66eUL, 0x83d48029b5451694UL,
            0xa8bb6d80UL},
            {0xbd781c4454103f6UL, 0x612197322f49c931UL, 0xb9cf17fd7e5462d5UL, 0xe38e526cd3324364UL, 0x85f2b63a5b5e840aUL, 0x485d7cef5aaadd87UL, 0xd2b837a462f6db6dUL,
            0xe38e526cd3324364UL, 0x85f2b63a5b5e840aUL, 0x485d7cef5aaadd87UL, 0xd2b837a462f6db6dUL,
            0x3e41cef031520d9aUL, 0x82df73902d7f67eUL, 0x3ba6fd54c15257cbUL, 0x22f91f079be42d40UL,
            0x1f9fa607UL},
            {0xda60e6b14479f9dfUL, 0x3bdccf69ece16792UL, 0x18ebf45c4fecfdc9UL, 0x16818ee9d38c6664UL, 0x5519fa9a1e35a329UL, 0xcbd0001e4b08ed8UL, 0x41a965e37a0c731bUL,
            0x16818ee9d38c6664UL, 0x5519fa9a1e35a329UL, 0xcbd0001e4b08ed8UL, 0x41a965e37a0c731bUL,
            0x66e7b5dcca1ca28fUL, 0x963b2d993614347dUL, 0x9b6fc6f41d411106UL, 0xaaaecaccf7848c0cUL,
            0x8d0e4ed2UL},
            {0x4ca56a348b6c4d3UL, 0x60618537c3872514UL, 0x2fbb9f0e65871b09UL, 0x30278016830ddd43UL, 0xf046646d9012e074UL, 0xc62a5804f6e7c9daUL, 0x98d51f5830e2bc1eUL,
            0x30278016830ddd43UL, 0xf046646d9012e074UL, 0xc62a5804f6e7c9daUL, 0x98d51f5830e2bc1eUL,
            0x7b2cbe5d37e3f29eUL, 0x7b8c3ed50bda4aa0UL, 0x3ea60cc24639e038UL, 0xf7706de9fb0b5801UL,
            0x1bf31347UL},
            {0xebd22d4b70946401UL, 0x6863602bf7139017UL, 0xc0b1ac4e11b00666UL, 0x7d2782b82bd494b6UL, 0x97159ba1c26b304bUL, 0x42b3b0fd431b2ac2UL, 0xfaa81f82691c830cUL,
            0x7d2782b82bd494b6UL, 0x97159ba1c26b304bUL, 0x42b3b0fd431b2ac2UL, 0xfaa81f82691c830cUL,
            0x7cc6449234c7e185UL, 0xaeaa6fa643ca86a5UL, 0x1412db1c0f2e0133UL, 0x4df2fe3e4072934fUL,
            0x1ae3fc5bUL},
            {0x3cc4693d6cbcb0cUL, 0x501689ea1c70ffaUL, 0x10a4353e9c89e364UL, 0x58c8aba7475e2d95UL, 0x3e2f291698c9427aUL, 0xe8710d19c9de9e41UL, 0x65dda22eb04cf953UL,
            0x58c8aba7475e2d95UL, 0x3e2f291698c9427aUL, 0xe8710d19c9de9e41UL, 0x65dda22eb04cf953UL,
            0xd7729c48c250cffaUL, 0xef76162b2ddfba4bUL, 0x52371e17f4d51f6dUL, 0xddd002112ff0c833UL,
            0x459c3930UL},
            {0x38908e43f7ba5ef0UL, 0x1ab035d4e7781e76UL, 0x41d133e8c0a68ff7UL, 0xd1090893afaab8bcUL, 0x96c4fe6922772807UL, 0x4522426c2b4205ebUL, 0xefad99a1262e7e0dUL,
            0xd1090893afaab8bcUL, 0x96c4fe6922772807UL, 0x4522426c2b4205ebUL, 0xefad99a1262e7e0dUL,
            0xc7696029abdb465eUL, 0x4e18eaf03d517651UL, 0xd006bced54c86ac8UL, 0x4330326d1021860cUL,
            0xe00c4184UL},
            {0x34983ccc6aa40205UL, 0x21802cad34e72bc4UL, 0x1943e8fb3c17bb8UL, 0xfc947167f69c0da5UL, 0xae79cfdb91b6f6c1UL, 0x7b251d04c26cbda3UL, 0x128a33a79060d25eUL,
            0xfc947167f69c0da5UL, 0xae79cfdb91b6f6c1UL, 0x7b251d04c26cbda3UL, 0x128a33a79060d25eUL,
            0x1eca842dbfe018ddUL, 0x50a4cd2ee0ba9c63UL, 0xc2f5c97d8399682fUL, 0x3f929fc7cbe8ecbbUL,
            0xffc7a781UL},
            {0x86215c45dcac9905UL, 0xea546afe851cae4bUL, 0xd85b6457e489e374UL, 0xb7609c8e70386d66UL, 0x36e6ccc278d1636dUL, 0x2f873307c08e6a1cUL, 0x10f252a758505289UL,
            0xb7609c8e70386d66UL, 0x36e6ccc278d1636dUL, 0x2f873307c08e6a1cUL, 0x10f252a758505289UL,
            0xc8977646e81ab4b6UL, 0x8017b745cd80213bUL, 0x960687db359bea0UL, 0xef4a470660799488UL,
            0x6a125480UL},
            {0x420fc255c38db175UL, 0xd503cd0f3c1208d1UL, 0xd4684e74c825a0bcUL, 0x4c10537443152f3dUL, 0x720451d3c895e25dUL, 0xaff60c4d11f513fdUL, 0x881e8d6d2d5fb953UL,
            0x4c10537443152f3dUL, 0x720451d3c895e25dUL, 0xaff60c4d11f513fdUL, 0x881e8d6d2d5fb953UL,
            0x9dec034a043f1f55UL, 0xe27a0c22e7bfb39dUL, 0x2220b959128324UL, 0x53240272152dbd8bUL,
            0x88a1512bUL},
            {0x1d7a31f5bc8fe2f9UL, 0x4763991092dcf836UL, 0xed695f55b97416f4UL, 0xf265edb0c1c411d7UL, 0x30e1e9ec5262b7e6UL, 0xc2c3ba061ce7957aUL, 0xd975f93b89a16409UL,
            0xf265edb0c1c411d7UL, 0x30e1e9ec5262b7e6UL, 0xc2c3ba061ce7957aUL, 0xd975f93b89a16409UL,
            0xe9d703123f43450aUL, 0x41383fedfed67c82UL, 0x6e9f43ecbbbd6004UL, 0xc7ccd23a24e77b8UL,
            0x549bbbe5UL},
            {0x94129a84c376a26eUL, 0xc245e859dc231933UL, 0x1b8f74fecf917453UL, 0xe9369d2e9007e74bUL, 0xb1375915d1136052UL, 0x926c2021fe1d2351UL, 0x1d943addaaa2e7e6UL,
            0xe9369d2e9007e74bUL, 0xb1375915d1136052UL, 0x926c2021fe1d2351UL, 0x1d943addaaa2e7e6UL,
            0xf5f515869c246738UL, 0x7e309cd0e1c0f2a0UL, 0x153c3c36cf523e3bUL, 0x4931c66872ea6758UL,
            0xc133d38cUL},
            {0x1d3a9809dab05c8dUL, 0xadddeb4f71c93e8UL, 0xef342eb36631edbUL, 0x301d7a61c4b3dbcaUL, 0x861336c3f0552d61UL, 0x12c6db947471300fUL, 0xa679ef0ed761deb9UL,
            0x301d7a61c4b3dbcaUL, 0x861336c3f0552d61UL, 0x12c6db947471300fUL, 0xa679ef0ed761deb9UL,
            0x5f713b720efcd147UL, 0x37ac330a333aa6bUL, 0x3309dc9ec1616eefUL, 0x52301d7a908026b5UL,
            0xfcace348UL},
            {0x90fa3ccbd60848daUL, 0xdfa6e0595b569e11UL, 0xe585d067a1f5135dUL, 0x6cef866ec295abeaUL, 0xc486c0d9214beb2dUL, 0xd6e490944d5fe100UL, 0x59df3175d72c9f38UL,
            0x6cef866ec295abeaUL, 0xc486c0d9214beb2dUL, 0xd6e490944d5fe100UL, 0x59df3175d72c9f38UL,
            0x3f23aeb4c04d1443UL, 0x9bf0515cd8d24770UL, 0x958554f60ccaade2UL, 0x5182863c90132fe8UL,
            0xed7b6f9aUL},
            {0x2dbb4fc71b554514UL, 0x9650e04b86be0f82UL, 0x60f2304fba9274d3UL, 0xfcfb9443e997cabUL, 0xf13310d96dec2772UL, 0x709cad2045251af2UL, 0xafd0d30cc6376dadUL,
            0xfcfb9443e997cabUL, 0xf13310d96dec2772UL, 0x709cad2045251af2UL, 0xafd0d30cc6376dadUL,
            0x59d4bed30d550d0dUL, 0x58006d4e22d8aad1UL, 0xeee12d2362d1f13bUL, 0x35cf1d7faaf1d228UL,
            0x6d907ddaUL},
            {0xb98bf4274d18374aUL, 0x1b669fd4c7f9a19aUL, 0xb1f5972b88ba2b7aUL, 0x73119c99e6d508beUL, 0x5d4036a187735385UL, 0x8fa66e192fd83831UL, 0x2abf64b6b592ed57UL,
            0x73119c99e6d508beUL, 0x5d4036a187735385UL, 0x8fa66e192fd83831UL, 0x2abf64b6b592ed57UL,
            0xd4501f95dd84b08cUL, 0xbf1552439c8bea02UL, 0x4f56fe753ba7e0baUL, 0x4ca8d35cc058cfcdUL,
            0x7a4d48d5UL},
            {0xd6781d0b5e18eb68UL, 0xb992913cae09b533UL, 0x58f6021caaee3a40UL, 0xaafcb77497b5a20bUL, 0x411819e5e79b77a3UL, 0xbd779579c51c77ceUL, 0x58d11f5dcf5d075dUL,
            0xaafcb77497b5a20bUL, 0x411819e5e79b77a3UL, 0xbd779579c51c77ceUL, 0x58d11f5dcf5d075dUL,
            0x9eae76cde1cb4233UL, 0x32fe25a9bf657970UL, 0x1c0c807948edb06aUL, 0xb8f29a3dfaee254dUL,
            0xe686f3dbUL},
            {0x226651cf18f4884cUL, 0x595052a874f0f51cUL, 0xc9b75162b23bab42UL, 0x3f44f873be4812ecUL, 0x427662c1dbfaa7b2UL, 0xa207ff9638fb6558UL, 0xa738d919e45f550fUL,
            0x3f44f873be4812ecUL, 0x427662c1dbfaa7b2UL, 0xa207ff9638fb6558UL, 0xa738d919e45f550fUL,
            0xcb186ea05717e7d6UL, 0x1ca7d68a5871fdc1UL, 0x5d4c119ea8ef3750UL, 0x72b6a10fa2ff9406UL,
            0xcce7c55UL},
            {0xa734fb047d3162d6UL, 0xe523170d240ba3a5UL, 0x125a6972809730e8UL, 0xd396a297799c24a1UL, 0x8fee992e3069bad5UL, 0x2e3a01b0697ccf57UL, 0xee9c7390bd901cfaUL,
            0xd396a297799c24a1UL, 0x8fee992e3069bad5UL, 0x2e3a01b0697ccf57UL, 0xee9c7390bd901cfaUL,
            0x56f2d9da0af28af2UL, 0x3fdd37b2fe8437cbUL, 0x3d13eeeb60d6aec0UL, 0x2432ae62e800a5ceUL,
            0xf58b96bUL},
            {0xc6df6364a24f75a3UL, 0xc294e2c84c4f5df8UL, 0xa88df65c6a89313bUL, 0x895fe8443183da74UL, 0xc7f2f6f895a67334UL, 0xa0d6b6a506691d31UL, 0x24f51712b459a9f0UL,
            0x895fe8443183da74UL, 0xc7f2f6f895a67334UL, 0xa0d6b6a506691d31UL, 0x24f51712b459a9f0UL,
            0x173a699481b9e088UL, 0x1dee9b77bcbf45d3UL, 0x32b98a646a8667d0UL, 0x3adcd4ee28f42a0eUL,
            0x1bbf6f60UL},
            {0xd8d1364c1fbcd10UL, 0x2d7cc7f54832deaaUL, 0x4e22c876a7c57625UL, 0xa3d5d1137d30c4bdUL, 0x1e7d706a49bdfb9eUL, 0xc63282b20ad86db2UL, 0xaec97fa07916bfd6UL,
            0xa3d5d1137d30c4bdUL, 0x1e7d706a49bdfb9eUL, 0xc63282b20ad86db2UL, 0xaec97fa07916bfd6UL,
            0x7c9ba3e52d44f73eUL, 0xaf62fd245811185dUL, 0x8a9d2dacd8737652UL, 0xbd2cce277d5fbec0UL,
            0xce5e0cc2UL},
            {0xaae06f9146db885fUL, 0x3598736441e280d9UL, 0xfba339b117083e55UL, 0xb22bf08d9f8aecf7UL, 0xc182730de337b922UL, 0x2b9adc87a0450a46UL, 0x192c29a9cfc00aadUL,
            0xb22bf08d9f8aecf7UL, 0xc182730de337b922UL, 0x2b9adc87a0450a46UL, 0x192c29a9cfc00aadUL,
            0x9fd733f1d84a59d9UL, 0xd86bd5c9839ace15UL, 0xaf20b57303172876UL, 0x9f63cb7161b5364cUL,
            0x584cfd6fUL},
            {0x8955ef07631e3bccUL, 0x7d70965ea3926f83UL, 0x39aed4134f8b2db6UL, 0x882efc2561715a9cUL, 0xef8132a18a540221UL, 0xb20a3c87a8c257c1UL, 0xf541b8628fad6c23UL,
            0x882efc2561715a9cUL, 0xef8132a18a540221UL, 0xb20a3c87a8c257c1UL, 0xf541b8628fad6c23UL,
            0x9552aed57a6e0467UL, 0x4d9fdd56867611a7UL, 0xc330279bf23b9eabUL, 0x44dbbaea2fcb8ebaUL,
            0x8f9bbc33UL},
            {0xad611c609cfbe412UL, 0xd3c00b18bf253877UL, 0x90b2172e1f3d0bfdUL, 0x371a98b2cb084883UL, 0x33a2886ee9f00663UL, 0xbe9568818ed6e6bdUL, 0xf244a0fa2673469aUL,
            0x371a98b2cb084883UL, 0x33a2886ee9f00663UL, 0xbe9568818ed6e6bdUL, 0xf244a0fa2673469aUL,
            0xb447050bd3e559e9UL, 0xd3b695dae7a13383UL, 0xded0bb65be471188UL, 0xca3c7a2b78922caeUL,
            0xd7640d95UL},
            {0xd5339adc295d5d69UL, 0xb633cc1dcb8b586aUL, 0xee84184cf5b1aeafUL, 0x89f3aab99afbd636UL, 0xf420e004f8148b9aUL, 0x6818073faa797c7cUL, 0xdd3b4e21cbbf42caUL,
            0x89f3aab99afbd636UL, 0xf420e004f8148b9aUL, 0x6818073faa797c7cUL, 0xdd3b4e21cbbf42caUL,
            0x6a2b7db261164844UL, 0xcbead63d1895852aUL, 0x93d37e1eae05e2f9UL, 0x5d06db2703fbc3aeUL,
            0x3d12a2bUL},
            {0x40d0aeff521375a8UL, 0x77ba1ad7ecebd506UL, 0x547c6f1a7d9df427UL, 0x21c2be098327f49bUL, 0x7e035065ac7bbef5UL, 0x6d7348e63023fb35UL, 0x9d427dc1b67c3830UL,
            0x21c2be098327f49bUL, 0x7e035065ac7bbef5UL, 0x6d7348e63023fb35UL, 0x9d427dc1b67c3830UL,
            0x4e3d018a43858341UL, 0xcf924bb44d6b43c5UL, 0x4618b6a26e3446aeUL, 0x54d3013fac3ed469UL,
            0xaaeafed0UL},
            {0x8b2d54ae1a3df769UL, 0x11e7adaee3216679UL, 0x3483781efc563e03UL, 0x9d097dd3152ab107UL, 0x51e21d24126e8563UL, 0xcba56cac884a1354UL, 0x39abb1b595f0a977UL,
            0x9d097dd3152ab107UL, 0x51e21d24126e8563UL, 0xcba56cac884a1354UL, 0x39abb1b595f0a977UL,
            0x81e6dd1c1109848fUL, 0x1644b209826d7b15UL, 0x6ac67e4e4b4812f0UL, 0xb3a9f5622c935bf7UL,
            0x95b9b814UL},
            {0x99c175819b4eae28UL, 0x932e8ff9f7a40043UL, 0xec78dcab07ca9f7cUL, 0xc1a78b82ba815b74UL, 0x458cbdfc82eb322aUL, 0x17f4a192376ed8d7UL, 0x6f9e92968bc8ccefUL,
            0xc1a78b82ba815b74UL, 0x458cbdfc82eb322aUL, 0x17f4a192376ed8d7UL, 0x6f9e92968bc8ccefUL,
            0x93e098c333b39905UL, 0xd59b1cace44b7fdcUL, 0xf7a64ed78c64c7c5UL, 0x7c6eca5dd87ec1ceUL,
            0x45fbe66eUL},
            {0x2a418335779b82fcUL, 0xaf0295987849a76bUL, 0xc12bc5ff0213f46eUL, 0x5aeead8d6cb25bb9UL, 0x739315f7743ec3ffUL, 0x9ab48d27111d2dccUL, 0x5b87bd35a975929bUL,
            0x5aeead8d6cb25bb9UL, 0x739315f7743ec3ffUL, 0x9ab48d27111d2dccUL, 0x5b87bd35a975929bUL,
            0xc3dd8d6d95a46bb3UL, 0x7bf9093215a4f483UL, 0xcb557d6ed84285bdUL, 0xdaf58422f261fdb5UL,
            0xb4baa7a8UL},
            {0x3b1fc6a3d279e67dUL, 0x70ea1e49c226396UL, 0x25505adcf104697cUL, 0xba1ffba29f0367aaUL, 0xa20bec1dd15a8b6cUL, 0xe9bf61d2dab0f774UL, 0xf4f35bf5870a049cUL,
            0xba1ffba29f0367aaUL, 0xa20bec1dd15a8b6cUL, 0xe9bf61d2dab0f774UL, 0xf4f35bf5870a049cUL,
            0x26787efa5b92385UL, 0x3d9533590ce30b59UL, 0xa4da3e40530a01d4UL, 0x6395deaefb70067cUL,
            0x83e962feUL},
            {0xd97eacdf10f1c3c9UL, 0xb54f4654043a36e0UL, 0xb128f6eb09d1234UL, 0xd8ad7ec84a9c9aa2UL, 0xe256cffed11f69e6UL, 0x2cf65e4958ad5bdaUL, 0xcfbf9b03245989a7UL,
            0xd8ad7ec84a9c9aa2UL, 0xe256cffed11f69e6UL, 0x2cf65e4958ad5bdaUL, 0xcfbf9b03245989a7UL,
            0x9fa51e6686cf4444UL, 0x9425c117a34609d5UL, 0xb25f7e2c6f30e96UL, 0xea5477c3f2b5afd1UL,
            0xaac3531cUL},
            {0x293a5c1c4e203cd4UL, 0x6b3329f1c130cefeUL, 0xf2e32f8ec76aac91UL, 0x361e0a62c8187bffUL, 0x6089971bb84d7133UL, 0x93df7741588dd50bUL, 0xc2a9b6abcd1d80b1UL,
            0x361e0a62c8187bffUL, 0x6089971bb84d7133UL, 0x93df7741588dd50bUL, 0xc2a9b6abcd1d80b1UL,
            0x4d2f86869d79bc59UL, 0x85cd24d8aa570ffUL, 0xb0dcf6ef0e94bbb5UL, 0x2037c69aa7a78421UL,
            0x2b1db7ccUL},
            {0x4290e018ffaedde7UL, 0xa14948545418eb5eUL, 0x72d851b202284636UL, 0x4ec02f3d2f2b23f2UL, 0xab3580708aa7c339UL, 0xcdce066fbab3f65UL, 0xd8ed3ecf3c7647b9UL,
            0x4ec02f3d2f2b23f2UL, 0xab3580708aa7c339UL, 0xcdce066fbab3f65UL, 0xd8ed3ecf3c7647b9UL,
            0x6d2204b3e31f344aUL, 0x61a4d87f80ee61d7UL, 0x446c43dbed4b728fUL, 0x73130ac94f58747eUL,
            0xcf00cd31UL},
            {0xf919a59cbde8bf2fUL, 0xa56d04203b2dc5a5UL, 0x38b06753ac871e48UL, 0xc2c9fc637dbdfcfaUL, 0x292ab8306d149d75UL, 0x7f436b874b9ffc07UL, 0xa5b56b0129218b80UL,
            0xc2c9fc637dbdfcfaUL, 0x292ab8306d149d75UL, 0x7f436b874b9ffc07UL, 0xa5b56b0129218b80UL,
            0x9188f7bdc47ec050UL, 0xcfe9345d03a15adeUL, 0x40b520fb2750c49eUL, 0xc2e83d343968af2eUL,
            0x7d3c43b8UL},
            {0x1d70a3f5521d7fa4UL, 0xfb97b3fdc5891965UL, 0x299d49bbbe3535afUL, 0xe1a8286a7d67946eUL, 0x52bd956f047b298UL, 0xcbd74332dd4204acUL, 0x12b5be7752721976UL,
            0xe1a8286a7d67946eUL, 0x52bd956f047b298UL, 0xcbd74332dd4204acUL, 0x12b5be7752721976UL,
            0x278426e27f6204b6UL, 0x932ca7a7cd610181UL, 0x41647321f0a5914dUL, 0x48f4aa61a0ae80dbUL,
            0xcbd5fac6UL},
            {0x6af98d7b656d0d7cUL, 0xd2e99ae96d6b5c0cUL, 0xf63bd1603ef80627UL, 0xbde51033ac0413f8UL, 0xbc0272f691aec629UL, 0x6204332651bebc44UL, 0x1cbf00de026ea9bdUL,
            0xbde51033ac0413f8UL, 0xbc0272f691aec629UL, 0x6204332651bebc44UL, 0x1cbf00de026ea9bdUL,
            0xb9c7ed6a75f3ff1eUL, 0x7e310b76a5808e4fUL, 0xacbbd1aad5531885UL, 0xfc245f2473adeb9cUL,
            0x76d0fec4UL},
            {0x395b7a8adb96ab75UL, 0x582df7165b20f4aUL, 0xe52bd30e9ff657f9UL, 0x6c71064996cbec8bUL, 0x352c535edeefcb89UL, 0xac7f0aba15cd5ecdUL, 0x3aba1ca8353e5c60UL,
            0x6c71064996cbec8bUL, 0x352c535edeefcb89UL, 0xac7f0aba15cd5ecdUL, 0x3aba1ca8353e5c60UL,
            0x5c30a288a80ce646UL, 0xc2940488b6617674UL, 0x925f8cc66b370575UL, 0xaa65d1283b9bb0efUL,
            0x405e3402UL},
            {0x3822dd82c7df012fUL, 0xb9029b40bd9f122bUL, 0xfd25b988468266c4UL, 0x43e47bd5bab1e0efUL, 0x4a71f363421f282fUL, 0x880b2f32a2b4e289UL, 0x1299d4eda9d3eadfUL,
            0x43e47bd5bab1e0efUL, 0x4a71f363421f282fUL, 0x880b2f32a2b4e289UL, 0x1299d4eda9d3eadfUL,
            0xd713a40226f5564UL, 0x4d8d34fedc769406UL, 0xa85001b29cd9cac3UL, 0xcae92352a41fd2b0UL,
            0xc732c481UL},
            {0x79f7efe4a80b951aUL, 0xdd3a3fddfc6c9c41UL, 0xab4c812f9e27aa40UL, 0x832954ec9d0de333UL, 0x94c390aa9bcb6b8aUL, 0xf3b32afdc1f04f82UL, 0xd229c3b72e4b9a74UL,
            0x832954ec9d0de333UL, 0x94c390aa9bcb6b8aUL, 0xf3b32afdc1f04f82UL, 0xd229c3b72e4b9a74UL,
            0x1d11860d7ed624a6UL, 0xcadee20b3441b984UL, 0x75307079bf306f7bUL, 0x87902aa3b9753ba4UL,
            0xa8d123c9UL},
            {0xae6e59f5f055921aUL, 0xe9d9b7bf68e82UL, 0x5ce4e4a5b269cc59UL, 0x4960111789727567UL, 0x149b8a37c7125ab6UL, 0x78c7a13ab9749382UL, 0x1c61131260ca151aUL,
            0x4960111789727567UL, 0x149b8a37c7125ab6UL, 0x78c7a13ab9749382UL, 0x1c61131260ca151aUL,
            0x1e93276b35c309a0UL, 0x2618f56230acde58UL, 0xaf61130a18e4febfUL, 0x7145deb18e89befeUL,
            0x1e80ad7dUL},
            {0x8959dbbf07387d36UL, 0xb4658afce48ea35dUL, 0x8f3f82437d8cb8d6UL, 0x6566d74954986ba5UL, 0x99d5235cc82519a7UL, 0x257a23805c2d825UL, 0xad75ccb968e93403UL,
            0x6566d74954986ba5UL, 0x99d5235cc82519a7UL, 0x257a23805c2d825UL, 0xad75ccb968e93403UL,
            0xb45bd4cf78e11f7fUL, 0x80c5536bdc487983UL, 0xa4fd76ecbf018c8aUL, 0x3b9dac78a7a70d43UL,
            0x52aeb863UL},
            {0x4739613234278a49UL, 0x99ea5bcd340bf663UL, 0x258640912e712b12UL, 0xc8a2827404991402UL, 0x7ee5e78550f02675UL, 0x2ec53952db5ac662UL, 0x1526405a9df6794bUL,
            0xc8a2827404991402UL, 0x7ee5e78550f02675UL, 0x2ec53952db5ac662UL, 0x1526405a9df6794bUL,
            0xeddc6271170c5e1fUL, 0xf5a85f986001d9d6UL, 0x95427c677bf58d58UL, 0x53ed666dfa85cb29UL,
            0xef7c0c18UL},
            {0x420e6c926bc54841UL, 0x96dbbf6f4e7c75cdUL, 0xd8d40fa70c3c67bbUL, 0x3edbc10e4bfee91bUL, 0xf0d681304c28ef68UL, 0x77ea602029aaaf9cUL, 0x90f070bd24c8483cUL,
            0x3edbc10e4bfee91bUL, 0xf0d681304c28ef68UL, 0x77ea602029aaaf9cUL, 0x90f070bd24c8483cUL,
            0x28bc8e41e08ceb86UL, 0x1eb56e48a65691efUL, 0x9fea5301c9202f0eUL, 0x3fcb65091aa9f135UL,
            0xb6ad4b68UL},
            {0xc8601bab561bc1b7UL, 0x72b26272a0ff869aUL, 0x56fdfc986d6bc3c4UL, 0x83707730cad725d4UL, 0xc9ca88c3a779674aUL, 0xe1c696fbbd9aa933UL, 0x723f3baab1c17a45UL,
            0x83707730cad725d4UL, 0xc9ca88c3a779674aUL, 0xe1c696fbbd9aa933UL, 0x723f3baab1c17a45UL,
            0xf82abc7a1d851682UL, 0x30683836818e857dUL, 0x78bfa3e89a5ab23fUL, 0x6928234482b31817UL,
            0xc1e46b17UL},
            {0xb2d294931a0e20ebUL, 0x284ffd9a0815bc38UL, 0x1f8a103aac9bbe6UL, 0x1ef8e98e1ea57269UL, 0x5971116272f45a8bUL, 0x187ad68ce95d8eacUL, 0xe94e93ee4e8ecaa6UL,
            0x1ef8e98e1ea57269UL, 0x5971116272f45a8bUL, 0x187ad68ce95d8eacUL, 0xe94e93ee4e8ecaa6UL,
            0xa0ff2a58611838b5UL, 0xb01e03849bfbae6fUL, 0xd081e202e28ea3abUL, 0x51836bcee762bf13UL,
            0x57b8df25UL},
            {0x7966f53c37b6c6d7UL, 0x8e6abcfb3aa2b88fUL, 0x7f2e5e0724e5f345UL, 0x3eeb60c3f5f8143dUL, 0xa25aec05c422a24fUL, 0xb026b03ad3cca4dbUL, 0xe6e030028cc02a02UL,
            0x3eeb60c3f5f8143dUL, 0xa25aec05c422a24fUL, 0xb026b03ad3cca4dbUL, 0xe6e030028cc02a02UL,
            0x16fe679338b34bfcUL, 0xc1be385b5c8a9de4UL, 0x65af5df6567530ebUL, 0xed3b303df4dc6335UL,
            0xe9fa36d6UL},
            {0xbe9bb0abd03b7368UL, 0x13bca93a3031be55UL, 0xe864f4f52b55b472UL, 0x36a8d13a2cbb0939UL, 0x254ac73907413230UL, 0x73520d1522315a70UL, 0x8c9fdb5cf1e1a507UL,
            0x36a8d13a2cbb0939UL, 0x254ac73907413230UL, 0x73520d1522315a70UL, 0x8c9fdb5cf1e1a507UL,
            0xb3640570b926886UL, 0xfba2344ee87f7babUL, 0xde57341ab448df05UL, 0x385612ee094fa977UL,
            0x8f8daefcUL},
            {0xa08d128c5f1649beUL, 0xa8166c3dbbe19aadUL, 0xcb9f914f829ec62cUL, 0x5b2b7ca856fad1c3UL, 0x8093022d682e375dUL, 0xea5d163ba7ea231fUL, 0xd6181d012c0de641UL,
            0x5b2b7ca856fad1c3UL, 0x8093022d682e375dUL, 0xea5d163ba7ea231fUL, 0xd6181d012c0de641UL,
            0xe7d40d0ab8b08159UL, 0x2e82320f51b3a67eUL, 0x27c2e356ea0b63a3UL, 0x58842d01a2b1d077UL,
            0x6e1bb7eUL},
            {0x7c386f0ffe0465acUL, 0x530419c9d843dbf3UL, 0x7450e3a4f72b8d8cUL, 0x48b218e3b721810dUL, 0xd3757ac8609bc7fcUL, 0x111ba02a88aefc8UL, 0xe86343137d3bfc2aUL,
            0x48b218e3b721810dUL, 0xd3757ac8609bc7fcUL, 0x111ba02a88aefc8UL, 0xe86343137d3bfc2aUL,
            0x44ad26b51661b507UL, 0xdb1268670274f51eUL, 0x62a5e75beae875f3UL, 0xe266e7a44c5f28c6UL,
            0xfd0076f0UL},
            {0xbb362094e7ef4f8UL, 0xff3c2a48966f9725UL, 0x55152803acd4a7feUL, 0x15747d8c505ffd00UL, 0x438a15f391312cd6UL, 0xe46ca62c26d821f5UL, 0xbe78d74c9f79cb44UL,
            0x15747d8c505ffd00UL, 0x438a15f391312cd6UL, 0xe46ca62c26d821f5UL, 0xbe78d74c9f79cb44UL,
            0xa8aa19f3aa59f09aUL, 0xeffb3cddab2c9267UL, 0xd78e41ad97cb16a5UL, 0xace6821513527d32UL,
            0x899b17b6UL},
            {0xcd80dea24321eea4UL, 0x52b4fdc8130c2b15UL, 0xf3ea100b154bfb82UL, 0xd9ccef1d4be46988UL, 0x5ede0c4e383a5e66UL, 0xda69683716a54d1eUL, 0xbfc3fdf02d242d24UL,
            0xd9ccef1d4be46988UL, 0x5ede0c4e383a5e66UL, 0xda69683716a54d1eUL, 0xbfc3fdf02d242d24UL,
            0x20ed30274651b3f5UL, 0x4c659824169e86c6UL, 0x637226dae5b52a0eUL, 0x7e050dbd1c71dc7fUL,
            0xe3e84e31UL},
            {0xd599a04125372c3aUL, 0x313136c56a56f363UL, 0x1e993c3677625832UL, 0x2870a99c76a587a4UL, 0x99f74cc0b182dda4UL, 0x8a5e895b2f0ca7b6UL, 0x3d78882d5e0bb1dcUL,
            0x2870a99c76a587a4UL, 0x99f74cc0b182dda4UL, 0x8a5e895b2f0ca7b6UL, 0x3d78882d5e0bb1dcUL,
            0xf466123732a3e25eUL, 0xaca5e59716a40e50UL, 0x261d2e7383d0e686UL, 0xce9362d6a42c15a7UL,
            0xeef79b6bUL},
            {0xdbbf541e9dfda0aUL, 0x1479fceb6db4f844UL, 0x31ab576b59062534UL, 0xa3335c417687cf3aUL, 0x92ff114ac45cda75UL, 0xc3b8a627384f13b5UL, 0xc4f25de33de8b3f7UL,
            0xa3335c417687cf3aUL, 0x92ff114ac45cda75UL, 0xc3b8a627384f13b5UL, 0xc4f25de33de8b3f7UL,
            0xeacbf520578c5964UL, 0x4cb19c5ab24f3215UL, 0xe7d8a6f67f0c6e7UL, 0x325c2413eb770adaUL,
            0x868e3315UL},
            {0xc2ee3288be4fe2bfUL, 0xc65d2f5ddf32b92UL, 0xaf6ecdf121ba5485UL, 0xc7cd48f7abf1fe59UL, 0xce600656ace6f53aUL, 0x8a94a4381b108b34UL, 0xf9d1276c64bf59fbUL,
            0xc7cd48f7abf1fe59UL, 0xce600656ace6f53aUL, 0x8a94a4381b108b34UL, 0xf9d1276c64bf59fbUL,
            0x219ce70ff5a112a5UL, 0xe6026c576e2d28d7UL, 0xb8e467f25015e3a6UL, 0x950cb904f37af710UL,
            0x4639a426UL},
            {0xd86603ced1ed4730UL, 0xf9de718aaada7709UL, 0xdb8b9755194c6535UL, 0xd803e1eead47604cUL, 0xad00f7611970a71bUL, 0xbc50036b16ce71f5UL, 0xafba96210a2ca7d6UL,
            0xd803e1eead47604cUL, 0xad00f7611970a71bUL, 0xbc50036b16ce71f5UL, 0xafba96210a2ca7d6UL,
            0x28f7a7be1d6765f0UL, 0x97bd888b93938c68UL, 0x6ad41d1b407ded49UL, 0xb9bfec098dc543e4UL,
            0xf3213646UL},
            {0x915263c671b28809UL, 0xa815378e7ad762fdUL, 0xabec6dc9b669f559UL, 0xd17c928c5342477fUL, 0x745130b795254ad5UL, 0x8c5db926fe88f8baUL, 0x742a95c953e6d974UL,
            0xd17c928c5342477fUL, 0x745130b795254ad5UL, 0x8c5db926fe88f8baUL, 0x742a95c953e6d974UL,
            0x279db8057b5d3e96UL, 0x98168411565b4ec4UL, 0x50a72c54fa1125faUL, 0x27766a635db73638UL,
            0x17f148e9UL},
            {0x2b67cdd38c307a5eUL, 0xcb1d45bb5c9fe1cUL, 0x800baf2a02ec18adUL, 0x6531c1fe32bcb417UL, 0x8c970d8df8cdbeb4UL, 0x917ba5fc67e72b40UL, 0x4b65e4e263e0a426UL,
            0x6531c1fe32bcb417UL, 0x8c970d8df8cdbeb4UL, 0x917ba5fc67e72b40UL, 0x4b65e4e263e0a426UL,
            0xe0de33ce88a8b3a9UL, 0xf8ef98a437e16b08UL, 0xa5162c0c7c5f7b62UL, 0xdbdac43361b2b881UL,
            0xbfd94880UL},
            {0x2d107419073b9cd0UL, 0xa96db0740cef8f54UL, 0xec41ee91b3ecdc1bUL, 0xffe319654c8e7ebcUL, 0x6a67b8f13ead5a72UL, 0x6dd10a34f80d532fUL, 0x6e9cfaece9fbca4UL,
            0xffe319654c8e7ebcUL, 0x6a67b8f13ead5a72UL, 0x6dd10a34f80d532fUL, 0x6e9cfaece9fbca4UL,
            0xb4468eb6a30aa7e9UL, 0xe87995bee483222aUL, 0xd036c2c90c609391UL, 0x853306e82fa32247UL,
            0xbb1fa7f3UL},
            {0xf3e9487ec0e26dfcUL, 0x1ab1f63224e837faUL, 0x119983bb5a8125d8UL, 0x8950cfcf4bdf622cUL, 0x8847dca82efeef2fUL, 0x646b75b026708169UL, 0x21cab4b1687bd8bUL,
            0x8950cfcf4bdf622cUL, 0x8847dca82efeef2fUL, 0x646b75b026708169UL, 0x21cab4b1687bd8bUL,
            0x243b489a9eae6231UL, 0x5f3e634c4b779876UL, 0xff8abd1548eaf646UL, 0xc7962f5f0151914bUL,
            0x88816b1UL},
            {0x1160987c8fe86f7dUL, 0x879e6db1481eb91bUL, 0xd7dcb802bfe6885dUL, 0x14453b5cc3d82396UL, 0x4ef700c33ed278bcUL, 0x1639c72ffc00d12eUL, 0xfb140ee6155f700dUL,
            0x14453b5cc3d82396UL, 0x4ef700c33ed278bcUL, 0x1639c72ffc00d12eUL, 0xfb140ee6155f700dUL,
            0x2e6b5c96a6620862UL, 0xa1f136998cbe19cUL, 0x74e058a3b6c5a712UL, 0x93dcf6bd33928b17UL,
            0x5c2faeb3UL},
            {0xeab8112c560b967bUL, 0x97f550b58e89dbaeUL, 0x846ed506d304051fUL, 0x276aa37744b5a028UL, 0x8c10800ee90ea573UL, 0xe6e57d2b33a1e0b7UL, 0x91f83563cd3b9ddaUL,
            0x276aa37744b5a028UL, 0x8c10800ee90ea573UL, 0xe6e57d2b33a1e0b7UL, 0x91f83563cd3b9ddaUL,
            0xafbb4739570738a1UL, 0x440ba98da5d8f69UL, 0xfde4e9b0eda20350UL, 0xe67dfa5a2138fa1UL,
            0x51b5fc6fUL},
            {0x1addcf0386d35351UL, 0xb5f436561f8f1484UL, 0x85d38e22181c9bb1UL, 0xff5c03f003c1fefeUL, 0xe1098670afe7ff6UL, 0xea445030cf86de19UL, 0xf155c68b5c2967f8UL,
            0xff5c03f003c1fefeUL, 0xe1098670afe7ff6UL, 0xea445030cf86de19UL, 0xf155c68b5c2967f8UL,
            0x95d31b145dbb2e9eUL, 0x914fe1ca3deb3265UL, 0x6066020b1358ccc1UL, 0xc74bb7e2dee15036UL,
            0x33d94752UL},
            {0xd445ba84bf803e09UL, 0x1216c2497038f804UL, 0x2293216ea2237207UL, 0xe2164451c651adfbUL, 0xb2534e65477f9823UL, 0x4d70691a69671e34UL, 0x15be4963dbde8143UL,
            0xe2164451c651adfbUL, 0xb2534e65477f9823UL, 0x4d70691a69671e34UL, 0x15be4963dbde8143UL,
            0x762e75c406c5e9a3UL, 0x7b7579f7e0356841UL, 0x480533eb066dfce5UL, 0x90ae14ea6bfeb4aeUL,
            0xb0c92948UL},
            {0x37235a096a8be435UL, 0xd9b73130493589c2UL, 0x3b1024f59378d3beUL, 0xad159f542d81f04eUL, 0x49626a97a946096UL, 0xd8d3998bf09fd304UL, 0xd127a411eae69459UL,
            0xad159f542d81f04eUL, 0x49626a97a946096UL, 0xd8d3998bf09fd304UL, 0xd127a411eae69459UL,
            0x8f3253c4eb785a7bUL, 0x4049062f37e62397UL, 0xb9fa04d3b670e5c1UL, 0x1211a7967ac9350fUL,
            0xc7171590UL},
            {0x763ad6ea2fe1c99dUL, 0xcf7af5368ac1e26bUL, 0x4d5e451b3bb8d3d4UL, 0x3712eb913d04e2f2UL, 0x2f9500d319c84d89UL, 0x4ac6eb21a8cf06f9UL, 0x7d1917afcde42744UL,
            0x3712eb913d04e2f2UL, 0x2f9500d319c84d89UL, 0x4ac6eb21a8cf06f9UL, 0x7d1917afcde42744UL,
            0x6b58604b5dd10903UL, 0xc4288dfbc1e319fcUL, 0x230f75ca96817c6eUL, 0x8894cba3b763756cUL,
            0x240a67fbUL},
            {0xea627fc84cd1b857UL, 0x85e372494520071fUL, 0x69ec61800845780bUL, 0xa3c1c5ca1b0367UL, 0xeb6933997272bb3dUL, 0x76a72cb62692a655UL, 0x140bb5531edf756eUL,
            0xa3c1c5ca1b0367UL, 0xeb6933997272bb3dUL, 0x76a72cb62692a655UL, 0x140bb5531edf756eUL,
            0x8d0d8067d1c925f4UL, 0x7b3fa56d8d77a10cUL, 0x2bd00287b0946d88UL, 0xf08c8e4bd65b8970UL,
            0xe1843cd5UL},
            {0x1f2ffd79f2cdc0c8UL, 0x726a1bc31b337aaaUL, 0x678b7f275ef96434UL, 0x5aa82bfaa99d3978UL, 0xc18f96cade5ce18dUL, 0x38404491f9e34c03UL, 0x891fb8926ba0418cUL,
            0x5aa82bfaa99d3978UL, 0xc18f96cade5ce18dUL, 0x38404491f9e34c03UL, 0x891fb8926ba0418cUL,
            0xe5f69a6398114c15UL, 0x7b8ded3623bc6b1dUL, 0x2f3e5c5da5ff70e8UL, 0x1ab142addea6a9ecUL,
            0xfda1452bUL},
            {0x39a9e146ec4b3210UL, 0xf63f75802a78b1acUL, 0xe2e22539c94741c3UL, 0x8b305d532e61226eUL, 0xcaeae80da2ea2eUL, 0x88a6289a76ac684eUL, 0x8ce5b5f9df1cbd85UL,
            0x8b305d532e61226eUL, 0xcaeae80da2ea2eUL, 0x88a6289a76ac684eUL, 0x8ce5b5f9df1cbd85UL,
            0x8ae1fc4798e00d57UL, 0xe7164b8fb364fc46UL, 0x6a978c9bd3a66943UL, 0xef10d5ae4dd08dcUL,
            0xa2cad330UL},
            {0x74cba303e2dd9d6dUL, 0x692699b83289fad1UL, 0xdfb9aa7874678480UL, 0x751390a8a5c41bdcUL, 0x6ee5fbf87605d34UL, 0x6ca73f610f3a8f7cUL, 0xe898b3c996570adUL,
            0x751390a8a5c41bdcUL, 0x6ee5fbf87605d34UL, 0x6ca73f610f3a8f7cUL, 0xe898b3c996570adUL,
            0x98168a5858fc7110UL, 0x6f987fa27aa0daa2UL, 0xf25e3e180d4b36a3UL, 0xd0b03495aeb1be8aUL,
            0x53467e16UL},
            {0x4cbc2b73a43071e0UL, 0x56c5db4c4ca4e0b7UL, 0x1b275a162f46bd3dUL, 0xb87a326e413604bfUL, 0xd8f9a5fa214b03abUL, 0x8a8bb8265771cf88UL, 0xa655319054f6e70fUL,
            0xb87a326e413604bfUL, 0xd8f9a5fa214b03abUL, 0x8a8bb8265771cf88UL, 0xa655319054f6e70fUL,
            0xb499cb8e65a9af44UL, 0xbee7fafcc8307491UL, 0x5d2e55fa9b27cda2UL, 0x63b120f5fb2d6ee5UL,
            0xda14a8d0UL},
            {0x875638b9715d2221UL, 0xd9ba0615c0c58740UL, 0x616d4be2dfe825aaUL, 0x5df25f13ea7bc284UL, 0x165edfaafd2598fbUL, 0xaf7215c5c718c696UL, 0xe9f2f9ca655e769UL,
            0x5df25f13ea7bc284UL, 0x165edfaafd2598fbUL, 0xaf7215c5c718c696UL, 0xe9f2f9ca655e769UL,
            0xe459cfcb565d3d2dUL, 0x41d032631be2418aUL, 0xc505db05fd946f60UL, 0x54990394a714f5deUL,
            0x67333551UL},
            {0xfb686b2782994a8dUL, 0xedee60693756bb48UL, 0xe6bc3cae0ded2ef5UL, 0x58eb4d03b2c3ddf5UL, 0x6d2542995f9189f1UL, 0xc0beec58a5f5fea2UL, 0xed67436f42e2a78bUL,
            0x58eb4d03b2c3ddf5UL, 0x6d2542995f9189f1UL, 0xc0beec58a5f5fea2UL, 0xed67436f42e2a78bUL,
            0xdfec763cdb2b5193UL, 0x724a8d5345bd2d6UL, 0x94d4fd1b81457c23UL, 0x28e87c50cdede453UL,
            0xa0ebd66eUL},
            {0xab21d81a911e6723UL, 0x4c31b07354852f59UL, 0x835da384c9384744UL, 0x7f759dddc6e8549aUL, 0x616dd0ca022c8735UL, 0x94717ad4bc15ceb3UL, 0xf66c7be808ab36eUL,
            0x7f759dddc6e8549aUL, 0x616dd0ca022c8735UL, 0x94717ad4bc15ceb3UL, 0xf66c7be808ab36eUL,
            0xaf8286b550b2f4b7UL, 0x745bd217d20a9f40UL, 0xc73bfb9c5430f015UL, 0x55e65922666e3fc2UL,
            0x4b769593UL},
            {0x33d013cc0cd46ecfUL, 0x3de726423aea122cUL, 0x116af51117fe21a9UL, 0xf271ba474edc562dUL, 0xe6596e67f9dd3ebdUL, 0xc0a288edf808f383UL, 0xb3def70681c6babcUL,
            0xf271ba474edc562dUL, 0xe6596e67f9dd3ebdUL, 0xc0a288edf808f383UL, 0xb3def70681c6babcUL,
            0x7da7864e9989b095UL, 0xbf2f8718693cd8a1UL, 0x264a9144166da776UL, 0x61ad90676870beb6UL,
            0x6aa75624UL},
            {0x8ca92c7cd39fae5dUL, 0x317e620e1bf20f1UL, 0x4f0b33bf2194b97fUL, 0x45744afcf131dbeeUL, 0x97222392c2559350UL, 0x498a19b280c6d6edUL, 0x83ac2c36acdb8d49UL,
            0x45744afcf131dbeeUL, 0x97222392c2559350UL, 0x498a19b280c6d6edUL, 0x83ac2c36acdb8d49UL,
            0x7a69645c294daa62UL, 0xabe9d2be8275b3d2UL, 0x39542019de371085UL, 0x7f4efac8488cd6adUL,
            0x602a3f96UL},
            {0xfdde3b03f018f43eUL, 0x38f932946c78660UL, 0xc84084ce946851eeUL, 0xb6dd09ba7851c7afUL, 0x570de4e1bb13b133UL, 0xc4e784eb97211642UL, 0x8285a7fcdcc7c58dUL,
            0xb6dd09ba7851c7afUL, 0x570de4e1bb13b133UL, 0xc4e784eb97211642UL, 0x8285a7fcdcc7c58dUL,
            0xd421f47990da899bUL, 0x8aed409c997eaa13UL, 0x7a045929c2e29ccfUL, 0xb373682a6202c86bUL,
            0xcd183c4dUL},
            {0x9c8502050e9c9458UL, 0xd6d2a1a69964beb9UL, 0x1675766f480229b5UL, 0x216e1d6c86cb524cUL, 0xd01cf6fd4f4065c0UL, 0xfffa4ec5b482ea0fUL, 0xa0e20ee6a5404ac1UL,
            0x216e1d6c86cb524cUL, 0xd01cf6fd4f4065c0UL, 0xfffa4ec5b482ea0fUL, 0xa0e20ee6a5404ac1UL,
            0xc1b037e4eebaf85eUL, 0x634e3d7c3ebf89ebUL, 0xbcda972358c67d1UL, 0xfd1352181e5b8578UL,
            0x960a4d07UL},
            {0x348176ca2fa2fdd2UL, 0x3a89c514cc360c2dUL, 0x9f90b8afb318d6d0UL, 0xbceee07c11a9ac30UL, 0x2e2d47dff8e77eb7UL, 0x11a394cd7b6d614aUL, 0x1d7c41d54e15cb4aUL,
            0xbceee07c11a9ac30UL, 0x2e2d47dff8e77eb7UL, 0x11a394cd7b6d614aUL, 0x1d7c41d54e15cb4aUL,
            0x15baa5ae7312b0fcUL, 0xf398f596cc984635UL, 0x8ab8fdf87a6788e8UL, 0xb2b5c1234ab47e2UL,
            0x9ae998c4UL},
            {0x4a3d3dfbbaea130bUL, 0x4e221c920f61ed01UL, 0x553fd6cd1304531fUL, 0xbd2b31b5608143feUL, 0xab717a10f2554853UL, 0x293857f04d194d22UL, 0xd51be8fa86f254f0UL,
            0xbd2b31b5608143feUL, 0xab717a10f2554853UL, 0x293857f04d194d22UL, 0xd51be8fa86f254f0UL,
            0x1eee39e07686907eUL, 0x639039fe0e8d3052UL, 0xd6ec1470cef97ffUL, 0x370c82b860034f0fUL,
            0x74e2179dUL},
            {0xb371f768cdf4edb9UL, 0xbdef2ace6d2de0f0UL, 0xe05b4100f7f1baecUL, 0xb9e0d415b4ebd534UL, 0xc97c2a27efaa33d7UL, 0x591cdb35f84ef9daUL, 0xa57d02d0e8e3756cUL,
            0xb9e0d415b4ebd534UL, 0xc97c2a27efaa33d7UL, 0x591cdb35f84ef9daUL, 0xa57d02d0e8e3756cUL,
            0x23f55f12d7c5c87bUL, 0x4c7ca0fe23221101UL, 0xdbc3020480334564UL, 0xd985992f32c236b1UL,
            0xee9bae25UL},
            {0x7a1d2e96934f61fUL, 0xeb1760ae6af7d961UL, 0x887eb0da063005dfUL, 0x2228d6725e31b8abUL, 0x9b98f7e4d0142e70UL, 0xb6a8c2115b8e0fe7UL, 0xb591e2f5ab9b94b1UL,
            0x2228d6725e31b8abUL, 0x9b98f7e4d0142e70UL, 0xb6a8c2115b8e0fe7UL, 0xb591e2f5ab9b94b1UL,
            0x6c1feaa8065318e0UL, 0x4e7e2ca21c2e81fbUL, 0xe9fe5d8ce7993c45UL, 0xee411fa2f12cf8dfUL,
            0xb66edf10UL},
            {0x8be53d466d4728f2UL, 0x86a5ac8e0d416640UL, 0x984aa464cdb5c8bbUL, 0x87049e68f5d38e59UL, 0x7d8ce44ec6bd7751UL, 0xcc28d08ab414839cUL, 0x6c8f0bd34fe843e3UL,
            0x87049e68f5d38e59UL, 0x7d8ce44ec6bd7751UL, 0xcc28d08ab414839cUL, 0x6c8f0bd34fe843e3UL,
            0xb8496dcdc01f3e47UL, 0x2f03125c282ac26UL, 0x82a8797ba3f5ef07UL, 0x7c977a4d10bf52b8UL,
            0xd6209737UL},
            {0x829677eb03abf042UL, 0x43cad004b6bc2c0UL, 0xf2f224756803971aUL, 0x98d0dbf796480187UL, 0xfbcb5f3e1bef5742UL, 0x5af2a0463bf6e921UL, 0xad9555bf0120b3a3UL,
            0x98d0dbf796480187UL, 0xfbcb5f3e1bef5742UL, 0x5af2a0463bf6e921UL, 0xad9555bf0120b3a3UL,
            0x283e39b3dc99f447UL, 0xbedaa1a4a0250c28UL, 0x9d50546624ff9a57UL, 0x4abaf523d1c090f6UL,
            0xb994a88UL},
            {0x754435bae3496fcUL, 0x5707fc006f094dcfUL, 0x8951c86ab19d8e40UL, 0x57c5208e8f021a77UL, 0xf7653fbb69cd9276UL, 0xa484410af21d75cbUL, 0xf19b6844b3d627e8UL,
            0x57c5208e8f021a77UL, 0xf7653fbb69cd9276UL, 0xa484410af21d75cbUL, 0xf19b6844b3d627e8UL,
            0xf37400fc3ffd9514UL, 0x36ae0d821734edfdUL, 0x5f37820af1f1f306UL, 0xbe637d40e6a5ad0UL,
            0xa05d43c0UL},
            {0xfda9877ea8e3805fUL, 0x31e868b6ffd521b7UL, 0xb08c90681fb6a0fdUL, 0x68110a7f83f5d3ffUL, 0x6d77e045901b85a8UL, 0x84ef681113036d8bUL, 0x3b9f8e3928f56160UL,
            0x68110a7f83f5d3ffUL, 0x6d77e045901b85a8UL, 0x84ef681113036d8bUL, 0x3b9f8e3928f56160UL,
            0xfc8b7f56c130835UL, 0xa11f3e800638e841UL, 0xd9572267f5cf28c1UL, 0x7897c8149803f2aaUL,
            0xc79f73a8UL},
            {0x2e36f523ca8f5eb5UL, 0x8b22932f89b27513UL, 0x331cd6ecbfadc1bbUL, 0xd1bfe4df12b04cbfUL, 0xf58c17243fd63842UL, 0x3a453cdba80a60afUL, 0x5737b2ca7470ea95UL,
            0xd1bfe4df12b04cbfUL, 0xf58c17243fd63842UL, 0x3a453cdba80a60afUL, 0x5737b2ca7470ea95UL,
            0x54d44a3f4477030cUL, 0x8168e02d4869aa7fUL, 0x77f383a17778559dUL, 0x95e1737d77a268fcUL,
            0xa490aff5UL},
            {0x21a378ef76828208UL, 0xa5c13037fa841da2UL, 0x506d22a53fbe9812UL, 0x61c9c95d91017da5UL, 0x16f7c83ba68f5279UL, 0x9c0619b0808d05f7UL, 0x83c117ce4e6b70a3UL,
            0x61c9c95d91017da5UL, 0x16f7c83ba68f5279UL, 0x9c0619b0808d05f7UL, 0x83c117ce4e6b70a3UL,
            0xcfb4c8af7fd01413UL, 0xfdef04e602e72296UL, 0xed6124d337889b1UL, 0x4919c86707b830daUL,
            0xdfad65b4UL},
            {0xccdd5600054b16caUL, 0xf78846e84204cb7bUL, 0x1f9faec82c24eac9UL, 0x58634004c7b2d19aUL, 0x24bb5f51ed3b9073UL, 0x46409de018033d00UL, 0x4a9805eed5ac802eUL,
            0x58634004c7b2d19aUL, 0x24bb5f51ed3b9073UL, 0x46409de018033d00UL, 0x4a9805eed5ac802eUL,
            0xe18de8db306baf82UL, 0x46bbf75f1fa025ffUL, 0x5faf2fb09be09487UL, 0x3fbc62bd4e558fb3UL,
            0x1d07dfbUL},
            {0x7854468f4e0cabd0UL, 0x3a3f6b4f098d0692UL, 0xae2423ec7799d30dUL, 0x29c3529eb165eebaUL, 0x443de3703b657c35UL, 0x66acbce31ae1bc8dUL, 0x1acc99effe1d547eUL,
            0x29c3529eb165eebaUL, 0x443de3703b657c35UL, 0x66acbce31ae1bc8dUL, 0x1acc99effe1d547eUL,
            0xcf07f8a57906573dUL, 0x31bafb0bbb9a86e7UL, 0x40c69492702a9346UL, 0x7df61fdaa0b858afUL,
            0x416df9a0UL},
            {0x7f88db5346d8f997UL, 0x88eac9aacc653798UL, 0x68a4d0295f8eefa1UL, 0xae59ca86f4c3323dUL, 0x25906c09906d5c4cUL, 0x8dd2aa0c0a6584aeUL, 0x232a7d96b38f40e9UL,
            0xae59ca86f4c3323dUL, 0x25906c09906d5c4cUL, 0x8dd2aa0c0a6584aeUL, 0x232a7d96b38f40e9UL,
            0x8986ee00a2ed0042UL, 0xc49ae7e428c8a7d1UL, 0xb7dd8280713ac9c2UL, 0xe018720aed1ebc28UL,
            0x1f8fb9ccUL},
            {0xbb3fb5fb01d60fcfUL, 0x1b7cc0847a215eb6UL, 0x1246c994437990a1UL, 0xd4edc954c07cd8f3UL, 0x224f47e7c00a30abUL, 0xd5ad7ad7f41ef0c6UL, 0x59e089281d869fd7UL,
            0xd4edc954c07cd8f3UL, 0x224f47e7c00a30abUL, 0xd5ad7ad7f41ef0c6UL, 0x59e089281d869fd7UL,
            0xf29340d07a14b6f1UL, 0xc87c5ef76d9c4ef3UL, 0x463118794193a9aUL, 0x2922dcb0540f0dbcUL,
            0x7abf48e3UL},
            {0x2e783e1761acd84dUL, 0x39158042bac975a0UL, 0x1cd21c5a8071188dUL, 0xb1b7ec44f9302176UL, 0x5cb476450dc0c297UL, 0xdc5ef652521ef6a2UL, 0x3cc79a9e334e1f84UL,
            0xb1b7ec44f9302176UL, 0x5cb476450dc0c297UL, 0xdc5ef652521ef6a2UL, 0x3cc79a9e334e1f84UL,
            0x769e2a283dbcc651UL, 0x9f24b105c8511d3fUL, 0xc31c15575de2f27eUL, 0xecfecf32c3ae2d66UL,
            0xdea4e3ddUL},
            {0x392058251cf22accUL, 0x944ec4475ead4620UL, 0xb330a10b5cb94166UL, 0x54bc9bee7cbe1767UL, 0x485820bdbe442431UL, 0x54d6120ea2972e90UL, 0xf437a0341f29b72aUL,
            0x54bc9bee7cbe1767UL, 0x485820bdbe442431UL, 0x54d6120ea2972e90UL, 0xf437a0341f29b72aUL,
            0x8f30885c784d5704UL, 0xaa95376b16c7906aUL, 0xe826928cfaf93dc3UL, 0x20e8f54d1c16d7d8UL,
            0xc6064f22UL},
            {0xadf5c1e5d6419947UL, 0x2a9747bc659d28aaUL, 0x95c5b8cb1f5d62cUL, 0x80973ea532b0f310UL, 0xa471829aa9c17dd9UL, 0xc2ff3479394804abUL, 0x6bf44f8606753636UL,
            0x80973ea532b0f310UL, 0xa471829aa9c17dd9UL, 0xc2ff3479394804abUL, 0x6bf44f8606753636UL,
            0x5184d2973e6dd827UL, 0x121b96369a332d9aUL, 0x5c25d3475ab69e50UL, 0x26d2961d62884168UL,
            0x743bed9cUL},
            {0x6bc1db2c2bee5abaUL, 0xe63b0ed635307398UL, 0x7b2eca111f30dbbcUL, 0x230d2b3e47f09830UL, 0xec8624a821c1caf4UL, 0xea6ec411cdbf1cb1UL, 0x5f38ae82af364e27UL,
            0x230d2b3e47f09830UL, 0xec8624a821c1caf4UL, 0xea6ec411cdbf1cb1UL, 0x5f38ae82af364e27UL,
            0xa519ef515ea7187cUL, 0x6bad5efa7ebae05fUL, 0x748abacb11a74a63UL, 0xa28eef963d1396ebUL,
            0xfce254d5UL},
            {0xb00f898229efa508UL, 0x83b7590ad7f6985cUL, 0x2780e70a0592e41dUL, 0x7122413bdbc94035UL, 0xe7f90fae33bf7763UL, 0x4b6bd0fb30b12387UL, 0x557359c0c44f48caUL,
            0x7122413bdbc94035UL, 0xe7f90fae33bf7763UL, 0x4b6bd0fb30b12387UL, 0x557359c0c44f48caUL,
            0xd5656c3d6bc5f0dUL, 0x983ff8e5e784da99UL, 0x628479671b445bfUL, 0xe179a1e27ce68f5dUL,
            0xe47ec9d1UL},
            {0xb56eb769ce0d9a8cUL, 0xce196117bfbcaf04UL, 0xb26c3c3797d66165UL, 0x5ed12338f630ab76UL, 0xfab19fcb319116dUL, 0x167f5f42b521724bUL, 0xc4aa56c409568d74UL,
            0x5ed12338f630ab76UL, 0xfab19fcb319116dUL, 0x167f5f42b521724bUL, 0xc4aa56c409568d74UL,
            0x75fff4b42f8e9778UL, 0x94218f94710c1ea3UL, 0xb7b05efb738b06a6UL, 0x83fff2deabf9cd3UL,
            0x334a145cUL},
            {0x70c0637675b94150UL, 0x259e1669305b0a15UL, 0x46e1dd9fd387a58dUL, 0xfca4e5bc9292788eUL, 0xcd509dc1facce41cUL, 0xbbba575a59d82feUL, 0x4e2e71c15b45d4d3UL,
            0xfca4e5bc9292788eUL, 0xcd509dc1facce41cUL, 0xbbba575a59d82feUL, 0x4e2e71c15b45d4d3UL,
            0x5dc54582ead999cUL, 0x72612d1571963c6fUL, 0x30318a9d2d3d1829UL, 0x785dd00f4cc9c9a0UL,
            0xadec1e3cUL},
            {0x74c0b8a6821faafeUL, 0xabac39d7491370e7UL, 0xfaf0b2a48a4e6aedUL, 0x967e970df9673d2aUL, 0xd465247cffa415c0UL, 0x33a1df0ca1107722UL, 0x49fc2a10adce4a32UL,
            0x967e970df9673d2aUL, 0xd465247cffa415c0UL, 0x33a1df0ca1107722UL, 0x49fc2a10adce4a32UL,
            0xc5707e079a284308UL, 0x573028266635dda6UL, 0xf786f5eee6127fa0UL, 0xb30d79cebfb51266UL,
            0xf6a9fbf8UL},
            {0x5fb5e48ac7b7fa4fUL, 0xa96170f08f5acbc7UL, 0xbbf5c63d4f52a1e5UL, 0x6cc09e60700563e9UL, 0xd18f23221e964791UL, 0xffc23eeef7af26ebUL, 0x693a954a3622a315UL,
            0x815308a32a9b0dafUL, 0xefb2ab27bf6fd0bdUL, 0x9f1ffc0986111118UL, 0xf9a3aa1778ea3985UL,
            0x698fe54b2b93933bUL, 0xdacc2b28404d0f10UL, 0x815308a32a9b0dafUL, 0xefb2ab27bf6fd0bdUL,
            0x5398210cUL},
            };

        #endregion Dados para teste

        /// <summary>
        /// Inicializa os dados utilizados no teste.
        /// </summary>
        /// <param name="context">O contexto do teste.</param>
        [ClassInitialize()]
        public static void ClassInit(TestContext context)
        {
            testString = GetTestString();
        }

        /// <summary>
        /// Testa a função que permite obter o código confuso de 64 bits
        /// a partir de um valor textual.
        /// </summary>
        [TestMethod]
        public void CityHash_GetHash64Test()
        {
            var target = new CityHash();

            var i = 0;
            var size = testdata.GetLength(0) - 1;
            for (; i < size; ++i)
            {
                var actual = target.GetHash64(
                    testString.Substring(i * i, i));
                var expected = testdata[i, 0];
                Assert.AreEqual(expected, actual);
            }

            var result = target.GetHash64(testString);
            var expRes = testdata[i, 0];
            Assert.AreEqual(expRes, result);
        }

        /// <summary>
        /// Testa a função que permite obter o código confuso de 32 bits
        /// a partir de um valor textual.
        /// </summary>
        [TestMethod]
        public void CityHash_GetHash32Test()
        {
            var target = new CityHash();

            var i = 0;
            var size = testdata.GetLength(0) - 1;
            for (; i < size; ++i)
            {
                var actual = target.GetHash32(
                    testString.Substring(i * i, i));
                var expected = testdata[i, 15];
                Assert.AreEqual(expected, actual);
            }

            var result = target.GetHash32(testString);
            var expRes = testdata[i, 15];
            Assert.AreEqual(expRes, result);
        }

        /// <summary>
        /// Obtém o texto que será usado como teste.
        /// </summary>
        /// <returns>O texto para teste.</returns>
        private static string GetTestString()
        {
            var resultBuilder = new StringBuilder();
            var dataSize = 1UL << 20;
            var a = 9UL;
            var b = 777UL;
            for (var i = 0UL; i < dataSize; i++)
            {
                a += b;
                b += a;
                a = (a ^ (a >> 41)) * k0;
                b = (b ^ (b >> 41)) * k0 + i;
                byte u = (byte)(b >> 37);
                resultBuilder.Append((char)u);
            }

            return resultBuilder.ToString();
        }
    }

    /// <summary>
    /// Testa o algoritmo CRC32.
    /// </summary>
    [TestClass]
    public class Crc32Test
    {
        /// <summary>
        /// Mantém a tabela usada no teste.
        /// </summary>
        private static uint[] table;

        /// <summary>
        /// Inicializa a tabela usada no teste.
        /// </summary>
        /// <param name="context">O contexto do teste.</param>
        [ClassInitialize()]
        public static void ClassInit(TestContext context)
        {
            table = new uint[] {
                0x00000000U, 0x77073096U, 0xee0e612cU, 0x990951baU, 0x076dc419U,
                0x706af48fU, 0xe963a535U, 0x9e6495a3U, 0x0edb8832U, 0x79dcb8a4U,
                0xe0d5e91eU, 0x97d2d988U, 0x09b64c2bU, 0x7eb17cbdU, 0xe7b82d07U,
                0x90bf1d91U, 0x1db71064U, 0x6ab020f2U, 0xf3b97148U, 0x84be41deU,
                0x1adad47dU, 0x6ddde4ebU, 0xf4d4b551U, 0x83d385c7U, 0x136c9856U,
                0x646ba8c0U, 0xfd62f97aU, 0x8a65c9ecU, 0x14015c4fU, 0x63066cd9U,
                0xfa0f3d63U, 0x8d080df5U, 0x3b6e20c8U, 0x4c69105eU, 0xd56041e4U,
                0xa2677172U, 0x3c03e4d1U, 0x4b04d447U, 0xd20d85fdU, 0xa50ab56bU,
                0x35b5a8faU, 0x42b2986cU, 0xdbbbc9d6U, 0xacbcf940U, 0x32d86ce3U,
                0x45df5c75U, 0xdcd60dcfU, 0xabd13d59U, 0x26d930acU, 0x51de003aU,
                0xc8d75180U, 0xbfd06116U, 0x21b4f4b5U, 0x56b3c423U, 0xcfba9599U,
                0xb8bda50fU, 0x2802b89eU, 0x5f058808U, 0xc60cd9b2U, 0xb10be924U,
                0x2f6f7c87U, 0x58684c11U, 0xc1611dabU, 0xb6662d3dU, 0x76dc4190U,
                0x01db7106U, 0x98d220bcU, 0xefd5102aU, 0x71b18589U, 0x06b6b51fU,
                0x9fbfe4a5U, 0xe8b8d433U, 0x7807c9a2U, 0x0f00f934U, 0x9609a88eU,
                0xe10e9818U, 0x7f6a0dbbU, 0x086d3d2dU, 0x91646c97U, 0xe6635c01U,
                0x6b6b51f4U, 0x1c6c6162U, 0x856530d8U, 0xf262004eU, 0x6c0695edU,
                0x1b01a57bU, 0x8208f4c1U, 0xf50fc457U, 0x65b0d9c6U, 0x12b7e950U,
                0x8bbeb8eaU, 0xfcb9887cU, 0x62dd1ddfU, 0x15da2d49U, 0x8cd37cf3U,
                0xfbd44c65U, 0x4db26158U, 0x3ab551ceU, 0xa3bc0074U, 0xd4bb30e2U,
                0x4adfa541U, 0x3dd895d7U, 0xa4d1c46dU, 0xd3d6f4fbU, 0x4369e96aU,
                0x346ed9fcU, 0xad678846U, 0xda60b8d0U, 0x44042d73U, 0x33031de5U,
                0xaa0a4c5fU, 0xdd0d7cc9U, 0x5005713cU, 0x270241aaU, 0xbe0b1010U,
                0xc90c2086U, 0x5768b525U, 0x206f85b3U, 0xb966d409U, 0xce61e49fU,
                0x5edef90eU, 0x29d9c998U, 0xb0d09822U, 0xc7d7a8b4U, 0x59b33d17U,
                0x2eb40d81U, 0xb7bd5c3bU, 0xc0ba6cadU, 0xedb88320U, 0x9abfb3b6U,
                0x03b6e20cU, 0x74b1d29aU, 0xead54739U, 0x9dd277afU, 0x04db2615U,
                0x73dc1683U, 0xe3630b12U, 0x94643b84U, 0x0d6d6a3eU, 0x7a6a5aa8U,
                0xe40ecf0bU, 0x9309ff9dU, 0x0a00ae27U, 0x7d079eb1U, 0xf00f9344U,
                0x8708a3d2U, 0x1e01f268U, 0x6906c2feU, 0xf762575dU, 0x806567cbU,
                0x196c3671U, 0x6e6b06e7U, 0xfed41b76U, 0x89d32be0U, 0x10da7a5aU,
                0x67dd4accU, 0xf9b9df6fU, 0x8ebeeff9U, 0x17b7be43U, 0x60b08ed5U,
                0xd6d6a3e8U, 0xa1d1937eU, 0x38d8c2c4U, 0x4fdff252U, 0xd1bb67f1U,
                0xa6bc5767U, 0x3fb506ddU, 0x48b2364bU, 0xd80d2bdaU, 0xaf0a1b4cU,
                0x36034af6U, 0x41047a60U, 0xdf60efc3U, 0xa867df55U, 0x316e8eefU,
                0x4669be79U, 0xcb61b38cU, 0xbc66831aU, 0x256fd2a0U, 0x5268e236U,
                0xcc0c7795U, 0xbb0b4703U, 0x220216b9U, 0x5505262fU, 0xc5ba3bbeU,
                0xb2bd0b28U, 0x2bb45a92U, 0x5cb36a04U, 0xc2d7ffa7U, 0xb5d0cf31U,
                0x2cd99e8bU, 0x5bdeae1dU, 0x9b64c2b0U, 0xec63f226U, 0x756aa39cU,
                0x026d930aU, 0x9c0906a9U, 0xeb0e363fU, 0x72076785U, 0x05005713U,
                0x95bf4a82U, 0xe2b87a14U, 0x7bb12baeU, 0x0cb61b38U, 0x92d28e9bU,
                0xe5d5be0dU, 0x7cdcefb7U, 0x0bdbdf21U, 0x86d3d2d4U, 0xf1d4e242U,
                0x68ddb3f8U, 0x1fda836eU, 0x81be16cdU, 0xf6b9265bU, 0x6fb077e1U,
                0x18b74777U, 0x88085ae6U, 0xff0f6a70U, 0x66063bcaU, 0x11010b5cU,
                0x8f659effU, 0xf862ae69U, 0x616bffd3U, 0x166ccf45U, 0xa00ae278U,
                0xd70dd2eeU, 0x4e048354U, 0x3903b3c2U, 0xa7672661U, 0xd06016f7U,
                0x4969474dU, 0x3e6e77dbU, 0xaed16a4aU, 0xd9d65adcU, 0x40df0b66U,
                0x37d83bf0U, 0xa9bcae53U, 0xdebb9ec5U, 0x47b2cf7fU, 0x30b5ffe9U,
                0xbdbdf21cU, 0xcabac28aU, 0x53b39330U, 0x24b4a3a6U, 0xbad03605U,
                0xcdd70693U, 0x54de5729U, 0x23d967bfU, 0xb3667a2eU, 0xc4614ab8U,
                0x5d681b02U, 0x2a6f2b94U, 0xb40bbe37U, 0xc30c8ea1U, 0x5a05df1bU,
                0x2d02ef8dU
            };
        }

        /// <summary>
        /// Testa a função CRC32.
        /// </summary>
        [TestMethod]
        public void Crc32_GetHashTest()
        {
            var target = new Crc32();

            var key = new byte[256];
            var hashes = new byte[1024];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.InternalCalculateHash(
                    table,
                    (uint)(256 - i),
                    key,
                    0,
                    i));
                Array.Copy(hashRes, 0, hashes, 4 * i, 4);
            }

            var final = target.InternalCalculateHash(table, 0, hashes, 0, 1024);

            // Verifica o valor da variável
            Assert.AreEqual(0x3719DB20U, final);
        }
    }

    /// <summary>
    /// Testa o algoritmo MurmurHash2.
    /// </summary>
    [TestClass]
    public class MurmurHash2Test
    {
        /// <summary>
        /// Teste sobre o algoritmo Murmur2.
        /// </summary>
        [TestMethod]
        public void MurmurHash2_MurmurHash2Test()
        {
            var target = new MurmurHash2();

            var key = new byte[256];
            var hashes = new byte[1024];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.GetMurmurHash2Internal(key, i, (uint)(256 - i)));
                Array.Copy(hashRes, 0, hashes, 4 * i, 4);
            }

            var final = target.GetMurmurHash2Internal(hashes, 1024, 0);

            // Verifica o valor da variável
            Assert.AreEqual(0x27864C1EU, final);
        }

        /// <summary>
        /// Teste sobre o algoritmo Murmur2.
        /// </summary>
        [TestMethod]
        public void MurmurHash2_MurmurHash2ATest()
        {
            var target = new MurmurHash2();

            var key = new byte[256];
            var hashes = new byte[1024];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.MurmurHash2AInternal(key, i, (uint)(256 - i)));
                Array.Copy(hashRes, 0, hashes, 4 * i, 4);
            }

            var final = target.MurmurHash2AInternal(hashes, 1024, 0);

            // Verifica o valor da variável
            Assert.AreEqual(0x7FBD4396U, final);
        }

        /// <summary>
        /// Teste sobre o algoritmo Murmur2.
        /// </summary>
        [TestMethod]
        public void MurmurHash2_MurmurHash64ATest()
        {
            var target = new MurmurHash2();

            var key = new byte[256];
            var hashes = new byte[2048];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.GetMurmurHash64AInternal(key, i, (uint)(256 - i)));
                Array.Copy(hashRes, 0, hashes, 8 * i, 8);
            }

            var final = target.GetMurmurHash64AInternal(hashes, 2048, 0);

            // Verifica o valor da variável
            Assert.AreEqual(0xF9A2C20A1F0D3804UL, final);
        }

        /// <summary>
        /// Teste sobre o algoritmo Murmur2.
        /// </summary>
        [TestMethod]
        public void MurmurHash2_MurmurHash64BTest()
        {
            var target = new MurmurHash2();

            var key = new byte[256];
            var hashes = new byte[2048];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.GetMurmurHash6BAInternal(key, i, (uint)(256 - i), 0U));
                Array.Copy(hashRes, 0, hashes, 8 * i, 8);
            }

            var final = target.GetMurmurHash6BAInternal(hashes, 2048, 0, 0);

            // Verifica o valor da variável
            Assert.AreEqual(0x387847D4DD537C05UL, final);
        }
    }

    /// <summary>
    /// Testa o algoritmo MurmurHash3.
    /// </summary>
    [TestClass]
    public class MurmurHash3Test
    {
        /// <summary>
        /// Testa o algoritmo do Murmur3 de 32 bit para a arquitectura x86.
        /// </summary>
        [TestMethod]
        public void MurmurHash3_MurmurHash3A32Test()
        {
            var target = new MurmurHash3();

            var key = new byte[256];
            var hashes = new byte[1024];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.InternalMurmurHash3A32(key, 0, i, (uint)(256 - i)));
                Array.Copy(hashRes, 0, hashes, 4 * i, 4);
            }

            var final = target.InternalMurmurHash3A32(hashes, 0, 1024, 0U);

            // Verifica o valor da variável
            Assert.AreEqual(0xB0F57EE3U, final);
        }

        /// <summary>
        /// Testa o algoritmo do Murmur3 128 bit para a arquitectura x86.
        /// </summary>
        [TestMethod]
        public void MurmurHash3_MurmuHash3A128Test()
        {
            var target = new MurmurHash3();

            var key = new byte[256];
            var hashes = new byte[4096];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = target.InternalMurmurHash3A128(key, 0, i, (uint)(256 - i));
                Array.Copy(hashRes, 0, hashes, 16 * i, 16);
            }

            var final = target.InternalMurmurHash3A128(hashes, 0, 4096, 0U);

            // Verifica o valor da variável
            Assert.AreEqual(0xD61A233AB3ECE62AUL, BitConverter.ToUInt64(final, 0));
            Assert.AreEqual(0x79C0CA32C3944F38UL, BitConverter.ToUInt64(final, 8));
        }

        /// <summary>
        /// Testa o algoritmo do Murmur3 128 bit para a arquitectura x64.
        /// </summary>
        [TestMethod]
        public void MurmurHash3_MurmurHash3B128Test()
        {
            var target = new MurmurHash3();

            var key = new byte[256];
            var hashes = new byte[4096];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = target.InternalMurmurHash3B128(key, 0, i, (uint)(256 - i));
                Array.Copy(hashRes, 0, hashes, 16 * i, 16);
            }

            var final = target.InternalMurmurHash3B128(hashes, 0, 4096, 0U);

            // Verifica o valor da variável
            Assert.AreEqual(0x63F3DE036384BA69UL, BitConverter.ToUInt64(final, 0));
            Assert.AreEqual(0x7192878CE684ED2DUL, BitConverter.ToUInt64(final, 8));
        }

        /// <summary>
        /// Envia os valores dos códigos confusos para um ficheiro.
        /// </summary>
        /// <param name="hashes">Os códigos confusos.</param>
        private void TemporarySendToFile(byte[] hashes)
        {
            var file = new System.IO.FileInfo("C:\\temp\\matutils_out.txt");
            using (var fileStream = file.OpenWrite())
            {
                using (var textWriter = new System.IO.StreamWriter(fileStream))
                {
                    for (var i = 0; i < hashes.Length; ++i)
                    {
                        textWriter.WriteLine(hashes[i]);
                    }
                }
            }
        }
    }

    /// <summary>
    /// Testa o algoritmo FNV.
    /// </summary>
    [TestClass]
    public class FnvHashTest
    {
        /// <summary>
        /// Testa o algoritmo FNV 32 bit.
        /// </summary>
        [TestMethod]
        public void FNVHash_FNV32HashTest()
        {
            // Teste ao FNV0
            var target = new FNVHash();
            var initConst = target.FNV032InitConst;

            var key = new byte[256];
            var hashes = new byte[1024];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.InternalGetFNVHash32(key, i, (uint)(initConst ^ (256 - i))));
                Array.Copy(hashRes, 0, hashes, 4 * i, 4);
            }

            var final = target.InternalGetFNVHash32(hashes, 1024, initConst);

            // Verifica o valor da variável
            Assert.AreEqual(0x6A72BCA5U, final);

            // Teste ao FNV1
            initConst = target.FNV132InitConst;
            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.InternalGetFNVHash32(key, i, (uint)(initConst ^ (256 - i))));
                Array.Copy(hashRes, 0, hashes, 4 * i, 4);
            }

            final = target.InternalGetFNVHash32(hashes, 1024, initConst);

            // Verifica o valor da variável
            Assert.AreEqual(0xFEA6139FU, final);
        }

        /// <summary>
        /// Testa o algoritmo FNV-A 32 bit.
        /// </summary>
        [TestMethod]
        public void FNVHash_FNV32AHashTest()
        {
            // Teste ao FNV0
            var target = new FNVHash();
            var initConst = target.FNV032InitConst;

            var key = new byte[256];
            var hashes = new byte[1024];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.InternalGetFNVHash32A(key, i, (uint)(initConst ^ (256 - i))));
                Array.Copy(hashRes, 0, hashes, 4 * i, 4);
            }

            var final = target.InternalGetFNVHash32A(hashes, 1024, initConst);

            // Verifica o valor da variável
            Assert.AreEqual(0x2E22411FU, final);

            // Teste ao FNV1
            initConst = target.FNV132InitConst;
            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.InternalGetFNVHash32A(key, i, (uint)(initConst ^ (256 - i))));
                Array.Copy(hashRes, 0, hashes, 4 * i, 4);
            }

            final = target.InternalGetFNVHash32A(hashes, 1024, initConst);

            // Verifica o valor da variável
            Assert.AreEqual(0xE3CBBE91U, final);
        }

        /// <summary>
        /// Testa o algoritmo FNV 64 bit.
        /// </summary>
        [TestMethod]
        public void FNVHash_FNV64HashTest()
        {
            // Teste ao FNV0
            var target = new FNVHash();
            var initConst = target.FNV064InitConst;

            var key = new byte[256];
            var hashes = new byte[2048];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.InternalGetFNVHash64(key, i, (initConst ^ (ulong)(256 - i))));
                Array.Copy(hashRes, 0, hashes, 8 * i, 8);
            }

            var final = target.InternalGetFNVHash64(hashes, 2048, initConst);

            // Verifica o valor da variável
            Assert.AreEqual(0xDE86975B98A772F7UL, final);

            // Teste ao FNV1
            initConst = target.FNV164InitConst;
            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.InternalGetFNVHash64(key, i, (initConst ^ (ulong)(256 - i))));
                Array.Copy(hashRes, 0, hashes, 8 * i, 8);
            }

            final = target.InternalGetFNVHash64(hashes, 2048, initConst);

            // Verifica o valor da variável
            Assert.AreEqual(0x8E4658608720E40UL, final);
        }

        /// <summary>
        /// Testa o algoritmo FNV-A 64 bit.
        /// </summary>
        [TestMethod]
        public void FNVHash_FNV64AHashTest()
        {
            // Teste ao FNV0
            var target = new FNVHash();
            var initConst = target.FNV064InitConst;

            var key = new byte[256];
            var hashes = new byte[2048];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.InternalGetFNVHash64A(key, i, (initConst ^ (ulong)(256 - i))));
                Array.Copy(hashRes, 0, hashes, 8 * i, 8);
            }

            var final = target.InternalGetFNVHash64A(hashes, 2048, initConst);

            // Verifica o valor da variável
            Assert.AreEqual(0x7A357599BF1EC520UL, final);

            // Teste ao FNV1
            initConst = target.FNV164InitConst;
            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.InternalGetFNVHash64A(key, i, (initConst ^ (ulong)(256 - i))));
                Array.Copy(hashRes, 0, hashes, 8 * i, 8);
            }

            final = target.InternalGetFNVHash64A(hashes, 2048, initConst);

            // Verifica o valor da variável
            Assert.AreEqual(0xCA277201103455FCUL, final);
        }
    }

    /// <summary>
    /// Testa o algoritmo Spooky para códigos confusos.
    /// </summary>
    [TestClass]
    public class SpookyHashV1Test
    {
        /// <summary>
        /// Testa a função principal do SpookyHash.
        /// </summary>
        [TestMethod]
        public void SpookyHashV1_Hash128Test()
        {
            var target = new SpookyHashV1(true);

            var key = new byte[256];
            var hashes = new byte[4096];
            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashResult = target.InternalGetHash128(key, 0, i, (ulong)(256 - i));
                var hashRes = BitConverter.GetBytes(hashResult.Item1);
                Array.Copy(hashRes, 0, hashes, 16 * i, 8);
                hashRes = BitConverter.GetBytes(hashResult.Item2);
                Array.Copy(hashRes, 0, hashes, 16 * i + 8, 8);
            }

            var final = target.InternalGetHash128(hashes, 0, 4096, 0);
            Assert.AreEqual(0x30141AFD8D263080UL, final.Item1);
            Assert.AreEqual(0xAADAFE2F34C28C97UL, final.Item2);
        }

        /// <summary>
        /// Testa a função principal do SpookyHash.
        /// </summary>
        [TestMethod]
        public void SpookyHashV2_Hash128Test()
        {
            var target = new SpookyHashV2(true);

            var key = new byte[256];
            var hashes = new byte[4096];
            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashResult = target.InternalGetHash128(key, 0, i, (ulong)(256 - i));
                var hashRes = BitConverter.GetBytes(hashResult.Item1);
                Array.Copy(hashRes, 0, hashes, 16 * i, 8);
                hashRes = BitConverter.GetBytes(hashResult.Item2);
                Array.Copy(hashRes, 0, hashes, 16 * i + 8, 8);
            }

            var final = target.InternalGetHash128(hashes, 0, 4096, 0);
            Assert.AreEqual(0x1BF0162A893CFCBEUL, final.Item1);
            Assert.AreEqual(0x9A39CA76E51DB823UL, final.Item2);
        }
    }

    /// <summary>
    /// Testa o algoritmo xxHash.
    /// </summary>
    [TestClass]
    public class XXHashTest : TestDiagnostics
    {
        /// <summary>
        /// Testa o algoritmo xxHash de 32 bit.
        /// </summary>
        [TestMethod]
        public void XXHash_GetXXHash32Test()
        {
            var target = new XXHash();

            var key = new byte[256];
            var hashes = new byte[1024];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.InternalGetXXHash32(key, 0, i, (uint)(256 - i)));
                Array.Copy(hashRes, 0, hashes, 4 * i, 4);
            }

            var final = target.InternalGetXXHash32(hashes, 0, 1024, 0U);
            Assert.AreEqual(0xBA88B743U, final);
        }

        /// <summary>
        /// Testa o algoritmo xxHash de 64 bit.
        /// </summary>
        [TestMethod]
        public void XXHash_GetXXHash64Test()
        {
            var target = new XXHash();

            var key = new byte[256];
            var hashes = new byte[2048];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(target.InternalGetXXHash64(key, 0, i, (uint)(256 - i)));
                Array.Copy(hashRes, 0, hashes, 8 * i, 8);
            }

            var final = target.InternalGetXXHash64(hashes, 0, 2048, 0UL);
            Assert.AreEqual(0x9527F100024B7CF4UL, final);
        }
    }

    /// <summary>
    /// Testa as funções de rotação para códigos confusos.
    /// </summary>
    [TestClass]
    public class RollingHashTest
    {
        /// <summary>
        /// Testa o algoritmo KarRab de 32 bit.
        /// </summary>
        [TestMethod]
        public void RollingHashTest_KarRabHash32Test()
        {
            var target = new KarRabHashByte32(2, 10);
            var testString = "abcdcbaabcd";
            var encoding = Encoding.GetEncoding("ISO-8859-1");

            var expected = new uint[]{
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd")),
                target.GetHash32(encoding.GetBytes("dc")),
                target.GetHash32(encoding.GetBytes("cb")),
                target.GetHash32(encoding.GetBytes("ba")),
                target.GetHash32(encoding.GetBytes("aa")),
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd"))
            };

            var bytes = encoding.GetBytes(testString);
            var len = bytes.Length;
            target.Eat(bytes[0]);
            target.Eat(bytes[1]);
            Assert.AreEqual(expected[0], target.HashValue);
            for (var i = 2; i < len; ++i)
            {
                target.Update(bytes[i], bytes[i - 2]);
                Assert.AreEqual(expected[i - 1], target.HashValue);
            }
        }

        /// <summary>
        /// Testa o algoritmo KarRab de 64 bit.
        /// </summary>
        [TestMethod]
        public void RollingHashTest_KarRabHash64Test()
        {
            var target = new KarRabHashByte64(2, 40);
            var testString = "abcdcbaabcd";
            var encoding = Encoding.GetEncoding("ISO-8859-1");

            var expected = new ulong[]{
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd")),
                target.GetHash64(encoding.GetBytes("dc")),
                target.GetHash64(encoding.GetBytes("cb")),
                target.GetHash64(encoding.GetBytes("ba")),
                target.GetHash64(encoding.GetBytes("aa")),
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd"))
            };

            var bytes = encoding.GetBytes(testString);
            var len = bytes.Length;
            target.Eat(bytes[0]);
            target.Eat(bytes[1]);
            Assert.AreEqual(expected[0], target.HashValue);
            for (var i = 2; i < len; ++i)
            {
                target.Update(bytes[i], bytes[i - 2]);
                Assert.AreEqual(expected[i - 1], target.HashValue);
            }
        }

        /// <summary>
        /// Testa o algoritmo geral de 32 bit.
        /// </summary>
        [TestMethod]
        public void RollingHashTest_GeneralHash32Test()
        {
            // Sem pré-computação 19 bit
            var target = new GenRollHashByte32(2, 19);
            var testString = "abcdcbaabcd";
            var encoding = Encoding.GetEncoding("ISO-8859-1");

            var expected = new ulong[]{
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd")),
                target.GetHash32(encoding.GetBytes("dc")),
                target.GetHash32(encoding.GetBytes("cb")),
                target.GetHash32(encoding.GetBytes("ba")),
                target.GetHash32(encoding.GetBytes("aa")),
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd"))
            };

            var bytes = encoding.GetBytes(testString);
            var len = bytes.Length;
            target.Eat(bytes[0]);
            target.Eat(bytes[1]);
            Assert.AreEqual(expected[0], target.HashValue);
            for (var i = 2; i < len; ++i)
            {
                target.Update(bytes[i], bytes[i - 2]);
                Assert.AreEqual(expected[i - 1], target.HashValue);
            }

            // Com pré-computação de 19 bit
            target = new GenRollHashByte32(
                2, 
                19, 
                GenRollHashByte32.PrecomputationType.FULLPRECOMP);
            expected = new ulong[]{
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd")),
                target.GetHash32(encoding.GetBytes("dc")),
                target.GetHash32(encoding.GetBytes("cb")),
                target.GetHash32(encoding.GetBytes("ba")),
                target.GetHash32(encoding.GetBytes("aa")),
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd"))
            };

            bytes = encoding.GetBytes(testString);
            len = bytes.Length;
            target.Eat(bytes[0]);
            target.Eat(bytes[1]);
            Assert.AreEqual(expected[0], target.HashValue);
            for (var i = 2; i < len; ++i)
            {
                target.Update(bytes[i], bytes[i - 2]);
                Assert.AreEqual(expected[i - 1], target.HashValue);
            }

            // Sem pré-computação de 9 bit.
            target = new GenRollHashByte32(
                2,
                9,
                GenRollHashByte32.PrecomputationType.NOPRECOMP);
            expected = new ulong[]{
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd")),
                target.GetHash32(encoding.GetBytes("dc")),
                target.GetHash32(encoding.GetBytes("cb")),
                target.GetHash32(encoding.GetBytes("ba")),
                target.GetHash32(encoding.GetBytes("aa")),
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd"))
            };

            bytes = encoding.GetBytes(testString);
            len = bytes.Length;
            target.Eat(bytes[0]);
            target.Eat(bytes[1]);
            Assert.AreEqual(expected[0], target.HashValue);
            for (var i = 2; i < len; ++i)
            {
                target.Update(bytes[i], bytes[i - 2]);
                Assert.AreEqual(expected[i - 1], target.HashValue);
            }

            // Com pré-computação de 9 bit.
            target = new GenRollHashByte32(
                2,
                9,
                GenRollHashByte32.PrecomputationType.FULLPRECOMP);
            expected = new ulong[]{
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd")),
                target.GetHash32(encoding.GetBytes("dc")),
                target.GetHash32(encoding.GetBytes("cb")),
                target.GetHash32(encoding.GetBytes("ba")),
                target.GetHash32(encoding.GetBytes("aa")),
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd"))
            };

            bytes = encoding.GetBytes(testString);
            len = bytes.Length;
            target.Eat(bytes[0]);
            target.Eat(bytes[1]);
            Assert.AreEqual(expected[0], target.HashValue);
            for (var i = 2; i < len; ++i)
            {
                target.Update(bytes[i], bytes[i - 2]);
                Assert.AreEqual(expected[i - 1], target.HashValue);
            }
        }

        /// <summary>
        /// Testa o algoritmo geral de 64 bit.
        /// </summary>
        [TestMethod]
        public void RollingHashTest_GeneralHash64Test()
        {
            // Sem pré-computação 19 bit
            var target = new GenRollHashByte64(2, 19);
            var testString = "abcdcbaabcd";
            var encoding = Encoding.GetEncoding("ISO-8859-1");

            var expected = new ulong[]{
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd")),
                target.GetHash64(encoding.GetBytes("dc")),
                target.GetHash64(encoding.GetBytes("cb")),
                target.GetHash64(encoding.GetBytes("ba")),
                target.GetHash64(encoding.GetBytes("aa")),
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd"))
            };

            var bytes = encoding.GetBytes(testString);
            var len = bytes.Length;
            target.Eat(bytes[0]);
            target.Eat(bytes[1]);
            Assert.AreEqual(expected[0], target.HashValue);
            for (var i = 2; i < len; ++i)
            {
                target.Update(bytes[i], bytes[i - 2]);
                Assert.AreEqual(expected[i - 1], target.HashValue);
            }

            // Com pré-computação de 19 bit
            target = new GenRollHashByte64(
                2,
                19,
                GenRollHashByte64.PrecomputationType.FULLPRECOMP);
            expected = new ulong[]{
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd")),
                target.GetHash64(encoding.GetBytes("dc")),
                target.GetHash64(encoding.GetBytes("cb")),
                target.GetHash64(encoding.GetBytes("ba")),
                target.GetHash64(encoding.GetBytes("aa")),
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd"))
            };

            bytes = encoding.GetBytes(testString);
            len = bytes.Length;
            target.Eat(bytes[0]);
            target.Eat(bytes[1]);
            Assert.AreEqual(expected[0], target.HashValue);
            for (var i = 2; i < len; ++i)
            {
                target.Update(bytes[i], bytes[i - 2]);
                Assert.AreEqual(expected[i - 1], target.HashValue);
            }

            // Sem pré-computação de 9 bit.
            target = new GenRollHashByte64(
                2,
                9,
                GenRollHashByte64.PrecomputationType.NOPRECOMP);
            expected = new ulong[]{
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd")),
                target.GetHash64(encoding.GetBytes("dc")),
                target.GetHash64(encoding.GetBytes("cb")),
                target.GetHash64(encoding.GetBytes("ba")),
                target.GetHash64(encoding.GetBytes("aa")),
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd"))
            };

            bytes = encoding.GetBytes(testString);
            len = bytes.Length;
            target.Eat(bytes[0]);
            target.Eat(bytes[1]);
            Assert.AreEqual(expected[0], target.HashValue);
            for (var i = 2; i < len; ++i)
            {
                target.Update(bytes[i], bytes[i - 2]);
                Assert.AreEqual(expected[i - 1], target.HashValue);
            }

            // Com pré-computação de 9 bit.
            target = new GenRollHashByte64(
                2,
                9,
                GenRollHashByte64.PrecomputationType.FULLPRECOMP);
            expected = new ulong[]{
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd")),
                target.GetHash64(encoding.GetBytes("dc")),
                target.GetHash64(encoding.GetBytes("cb")),
                target.GetHash64(encoding.GetBytes("ba")),
                target.GetHash64(encoding.GetBytes("aa")),
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd"))
            };

            bytes = encoding.GetBytes(testString);
            len = bytes.Length;
            target.Eat(bytes[0]);
            target.Eat(bytes[1]);
            Assert.AreEqual(expected[0], target.HashValue);
            for (var i = 2; i < len; ++i)
            {
                target.Update(bytes[i], bytes[i - 2]);
                Assert.AreEqual(expected[i - 1], target.HashValue);
            }
        }

        /// <summary>
        /// Testa o algoritmo cíclico para códigos confusos de 32 bit.
        /// </summary>
        [TestMethod]
        public void RollingHashTest_CyclicHash32Test()
        {
            var target = new CyclicHashByte32(2, 10);
            var testString = "abcdcbaabcd";
            var encoding = Encoding.GetEncoding("ISO-8859-1");

            var expected = new uint[]{
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd")),
                target.GetHash32(encoding.GetBytes("dc")),
                target.GetHash32(encoding.GetBytes("cb")),
                target.GetHash32(encoding.GetBytes("ba")),
                target.GetHash32(encoding.GetBytes("aa")),
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd"))
            };

            var bytes = encoding.GetBytes(testString);
            var len = bytes.Length;
            target.Eat(bytes[0]);
            target.Eat(bytes[1]);
            Assert.AreEqual(expected[0], target.HashValue);
            for (var i = 2; i < len; ++i)
            {
                target.Update(bytes[i], bytes[i - 2]);
                Assert.AreEqual(expected[i - 1], target.HashValue);
            }
        }

        /// <summary>
        /// Testa o algoritmo cíclico para códigos confusos de 64 bit.
        /// </summary>
        [TestMethod]
        public void RollingHashTest_CyclicHash64Test()
        {
            var target = new CyclicHashByte64(2, 50);
            var testString = "abcdcbaabcd";
            var encoding = Encoding.GetEncoding("ISO-8859-1");

            var expected = new ulong[]{
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd")),
                target.GetHash64(encoding.GetBytes("dc")),
                target.GetHash64(encoding.GetBytes("cb")),
                target.GetHash64(encoding.GetBytes("ba")),
                target.GetHash64(encoding.GetBytes("aa")),
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd"))
            };

            var bytes = encoding.GetBytes(testString);
            var len = bytes.Length;
            target.Eat(bytes[0]);
            target.Eat(bytes[1]);
            Assert.AreEqual(expected[0], target.HashValue);
            for (var i = 2; i < len; ++i)
            {
                target.Update(bytes[i], bytes[i - 2]);
                Assert.AreEqual(expected[i - 1], target.HashValue);
            }
        }

        /// <summary>
        /// Testa o algoritmo cíclico para códigos confusos de 32 bit.
        /// </summary>
        [TestMethod]
        public void RollingHashTest_CyclicReverseHash32Test()
        {
            var target = new CyclicHashByte32(2, 10);
            var testString = "abcdcbaabcd";
            var encoding = Encoding.GetEncoding("ISO-8859-1");

            var expected = new uint[]{
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd")),
                target.GetHash32(encoding.GetBytes("dc")),
                target.GetHash32(encoding.GetBytes("cb")),
                target.GetHash32(encoding.GetBytes("ba")),
                target.GetHash32(encoding.GetBytes("aa")),
                target.GetHash32(encoding.GetBytes("ab")),
                target.GetHash32(encoding.GetBytes("bc")),
                target.GetHash32(encoding.GetBytes("cd"))
            };

            var bytes = encoding.GetBytes(testString);
            var len = bytes.Length;
            target.Eat(bytes[len - 2]);
            target.Eat(bytes[len - 1]);
            Assert.AreEqual(expected[len - 2], target.HashValue);
            for (var i = len - 3; i >= 0; --i)
            {
                target.ReverseUpdate(bytes[i], bytes[i + 2]);
                Assert.AreEqual(expected[i], target.HashValue);
            }
        }

        /// <summary>
        /// Testa o algoritmo cíclico para códigos confusos de 64 bit.
        /// </summary>
        [TestMethod]
        public void RollingHashTest_CyclicReverseHash64Test()
        {
            var target = new CyclicHashByte64(2, 50);
            var testString = "abcdcbaabcd";
            var encoding = Encoding.GetEncoding("ISO-8859-1");

            var expected = new ulong[]{
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd")),
                target.GetHash64(encoding.GetBytes("dc")),
                target.GetHash64(encoding.GetBytes("cb")),
                target.GetHash64(encoding.GetBytes("ba")),
                target.GetHash64(encoding.GetBytes("aa")),
                target.GetHash64(encoding.GetBytes("ab")),
                target.GetHash64(encoding.GetBytes("bc")),
                target.GetHash64(encoding.GetBytes("cd"))
            };

            var bytes = encoding.GetBytes(testString);
            var len = bytes.Length;
            target.Eat(bytes[len - 2]);
            target.Eat(bytes[len - 1]);
            Assert.AreEqual(expected[len - 2], target.HashValue);
            for (var i = len - 3; i >= 0; --i)
            {
                target.ReverseUpdate(bytes[i], bytes[i + 2]);
                Assert.AreEqual(expected[i], target.HashValue);
            }
        }
    }

    /// <summary>
    /// Testa as funções simples que permitem determinar códigos confusos.
    /// </summary>
    [TestClass]
    public class SimpleHashFunctionsTest
    {
        /// <summary>
        /// Testa o algoritmo SuperFastHash.
        /// </summary>
        [TestMethod]
        public void SimpleHashFunctions_SuperFastHashTest()
        {
            var key = new byte[256];
            var hashes = new byte[1024];

            for (var i = 0; i < 256; ++i)
            {
                key[i] = (byte)i;
                var hashRes = BitConverter.GetBytes(SimpleHashFunctions.SuperFastHash(key, 0, i));
                Array.Copy(hashRes, 0, hashes, 4 * i, 4);
            }

            var final = SimpleHashFunctions.SuperFastHash(hashes, 0, 1024);

            // Verifica o valor da variável
            Assert.AreEqual(0xAC65A393U, final);
        }
    }

    /// <summary>
    /// Classe que disponibiliza algumas funções de auxílio ao
    /// diagnóstico em caso de erros encontrados.
    /// </summary>
    public class TestDiagnostics
    {
        /// <summary>
        /// Envia os valores dos códigos confusos para um ficheiro.
        /// </summary>
        /// <param name="hashes">Os códigos confusos.</param>
        protected void TemporarySendToFile(byte[] hashes)
        {
            var file = new System.IO.FileInfo("C:\\temp\\matutils_out.txt");
            using (var fileStream = file.OpenWrite())
            {
                using (var textWriter = new System.IO.StreamWriter(fileStream))
                {
                    for (var i = 0; i < hashes.Length; ++i)
                    {
                        textWriter.WriteLine(hashes[i]);
                    }
                }
            }
        }
    }
}
